stopAll

void Worker::stopAll(void)

Останавливает текущий процесс и завершает его работу.

Внимание
Worker::stopAll() используется для остановки текущего процесса, после его завершения главный процесс немедленно запускает новый процесс. Если вы хотите остановить весь сервис workerman, вызовите posix_kill(posix_getppid(), SIGINT)

Параметры

Нет параметров

Возвращаемое значение

Нет возвращаемых значений

Пример max_request

В приведенном примере дочерний процесс выполняет stopAll после обработки 1000 запросов, чтобы перезапустить новый процесс. Это похоже на атрибут max_request в php-fpm и в основном предназначено для решения проблем с утечкой памяти, вызванных ошибками в PHP бизнес-коде.

start.php

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

// Каждый процесс обрабатывает максимум 1000 запросов
define('MAX_REQUEST', 1000);

$http_worker = new Worker("http://0.0.0.0:2345");
$http_worker->onMessage = function(TcpConnection $connection, $data)
{
    // Количество уже обработанных запросов
    static $request_count = 0;

    $connection->send('hello http');
    // Если количество запросов достигло 1000
    if(++$request_count >= MAX_REQUEST)
    {
        /*
         * Завершить текущий процесс, главный процесс немедленно перезапустит новый процесс
         * для этого соответственно произойдет перезапуск процесса
         */
        Worker::stopAll();
    }
};

Worker::runAll();