PHP教程

php应用容器workerman_worker类接口stopAll说明及范例

本文主要是介绍php应用容器workerman_worker类接口stopAll说明及范例,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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();
这篇关于php应用容器workerman_worker类接口stopAll说明及范例的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!