stopAll
void Worker::stopAll(void)
停止當(dāng)前進(jìn)程并退出。
注意
Worker::stopAll()
用于停止當(dāng)前進(jìn)程,當(dāng)前進(jìn)程退出后主進(jìn)程會(huì)立刻拉起一個(gè)新的進(jìn)程。如果你想停止整個(gè)workerman服務(wù),請調(diào)用posix_kill(posix_getppid(), SIGINT)
參數(shù)
無參數(shù)
返回值
無返回
范例 max_request
下面例子子進(jìn)程每處理完1000個(gè)請求后執(zhí)行stopAll退出,以便重新啟動(dòng)一個(gè)全新進(jìn)程。類似php-fpm的max_request屬性,主要用于解決php業(yè)務(wù)代碼bug引起的內(nèi)存泄露問題。
start.php
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// 每個(gè)進(jìn)程最多執(zhí)行1000個(gè)請求
define('MAX_REQUEST', 1000);
$http_worker = new Worker("http://0.0.0.0:2345");
$http_worker->onMessage = function(TcpConnection $connection, $data)
{
// 已經(jīng)處理請求數(shù)
static $request_count = 0;
$connection->send('hello http');
// 如果請求數(shù)達(dá)到1000
if(++$request_count >= MAX_REQUEST)
{
/*
* 退出當(dāng)前進(jìn)程,主進(jìn)程會(huì)立刻重新啟動(dòng)一個(gè)全新進(jìn)程補(bǔ)充上來
* 從而完成進(jìn)程重啟
*/
Worker::stopAll();
}
};
Worker::runAll();