stopAll

void Worker::stopAll(void)

現在のプロセスを停止し、終了します。

注意
Worker::stopAll()は現在のプロセスを停止するために使用され、現在のプロセスが終了した後、メインプロセスは直ちに新しいプロセスを立ち上げます。全体のworkermanサービスを停止したい場合は、posix_kill(posix_getppid(), SIGINT)を呼び出してください。

パラメータ

パラメータはありません

戻り値

戻り値はありません

例 max_request

以下の例では、サブプロセスが1000件のリクエストを処理した後にstopAllを実行して終了し、完全に新しいプロセスを再起動します。これはphp-fpmのmax_request属性に似ており、主に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();