stopAll说明
void Worker::stopAll(void)
停止当前进程(子进程)的所有Worker实例并退出。
此方法用于安全退出当前子进程,作用相当于调用exit/die退出当前子进程。
与直接调用exit/die区别是,直接调用exit或者die无法触发onWorkerStop回调,并且会导致一条WORKER EXIT UNEXPECTED错误日志。
stopAll范例
下面例子子进程每处理完1000个请求后执行stopAll退出,以便重新启动一个全新进程。类似PHP-fpm的max_request属性,主要用于解决PHP业务代码bug引起的内存泄露问题。
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();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。