stopAll

void Worker::stopAll(void)

Dừng quá trình hiện tại và thoát.

Lưu ý
Worker::stopAll() được sử dụng để dừng quá trình hiện tại, sau khi quá trình hiện tại thoát, quá trình chính sẽ ngay lập tức khởi động một quá trình mới. Nếu bạn muốn dừng toàn bộ dịch vụ workerman, hãy gọi posix_kill(posix_getppid(), SIGINT)

Tham số

Không có tham số

Giá trị trả về

Không có giá trị trả về

Ví dụ max_request

Ví dụ dưới đây, subprocess sẽ thực hiện stopAll để thoát sau khi xử lý xong 1000 yêu cầu, nhằm khởi động một quá trình hoàn toàn mới. Giống như thuộc tính max_request trong php-fpm, chủ yếu được sử dụng để giải quyết vấn đề rò rỉ bộ nhớ do lỗi trong mã công việc php.

start.php

<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';

// Mỗi quá trình tối đa thực hiện 1000 yêu cầu
define('MAX_REQUEST', 1000);

$http_worker = new Worker("http://0.0.0.0:2345");
$http_worker->onMessage = function(TcpConnection $connection, $data)
{
    // Số lượng yêu cầu đã được xử lý
    static $request_count = 0;

    $connection->send('hello http');
    // Nếu số lượng yêu cầu đạt 1000
    if(++$request_count >= MAX_REQUEST)
    {
        /*
         * Thoát quá trình hiện tại, quá trình chính sẽ ngay lập tức khởi động một quá trình hoàn toàn mới để bổ sung
         * từ đó hoàn thành việc khởi động lại quá trình
         */
        Worker::stopAll();
    }
};

Worker::runAll();