stopAll

  1. void Worker::stopAll(void)

停止当前进程(子进程)的所有Worker实例并退出。

此方法用于安全退出当前子进程,作用相当于调用exit/die退出当前子进程。

与直接调用exit/die区别是,直接调用exit或者die无法触发onWorkerStop回调,并且会导致一条WORKER EXIT UNEXPECTED错误日志。

参数

无参数

返回值

无返回

范例 max_request

下面例子子进程每处理完1000个请求后执行stopAll退出,以便重新启动一个全新进程。类似php-fpm的max_request属性,主要用于解决php业务代码bug引起的内存泄露问题。

start.php

  1. <?php
  2. use Workerman\Worker;
  3. require_once __DIR__ . '/Workerman/Autoloader.php';
  4. // 每个进程最多执行1000个请求
  5. define('MAX_REQUEST', 1000);
  6. $http_worker = new Worker("http://0.0.0.0:2345");
  7. $http_worker->onMessage = function($connection, $data)
  8. {
  9. // 已经处理请求数
  10. static $request_count = 0;
  11. $connection->send('hello http');
  12. // 如果请求数达到1000
  13. if(++$request_count >= MAX_REQUEST)
  14. {
  15. /*
  16. * 退出当前进程,主进程会立刻重新启动一个全新进程补充上来
  17. * 从而完成进程重启
  18. */
  19. Worker::stopAll();
  20. }
  21. };
  22. Worker::runAll();