Process\Pool->on

设置进程池回调函数。

function Process\Pool::on(string $event, callable $function);

子进程启动

onWorkerStart回调函数,接受2个参数:

  1. Pool对象
  2. WorkerId当前工作进程的编号,底层会对子进程进行标号,范围是[0-$worker_num)
function onWorkerStart(Swoole\Process\Pool $pool, int $workerId)
{
    echo "Worker#{$workerId} is started\n";
}

子进程结束

onWorkerStop回调函数,与onWorkerStart参数一致。

消息接收

onMessage回调函数,收到外部投递的消息。 一次连接只能投递一次消息, 类似于php-fpm的短连接机制.

  1. Pool对象
  2. 消息数据内容
function onMessage(Swoole\Process\Pool $pool, string $data)
{
    var_dump($data);
}


  • 赞

    我4.2.5版本在尝试WorkerStart中使用了sleep(5),第一次循环会报: WARNING swProcessPool_wait: worker#1 abnormal exit, status=0, signal=11 之后就为什么不会再报了.

  • 混乱的sw

    swoole真的感觉很凌乱,各个功能模块之间不兼容,各种难以理解的bug或者运行意外;比如定时器和多进程以及服务器之间并没有很好的兼容,做一个功能,经常要测试半天,swoole是一个好东西,但是缺点就是太难用了,好的语言应该是趋向结构化和规范化的,swoole的各种实现逻辑和功能只能通过测试来积累经验,没有一个比较系统的知识结构,当你看到前方是口井,预想应该可以打一桶水凉快凉快,对不起,说不定井下是一个密室,swoole就是这样的怪脾气,总是给你这样的惊喜,这无疑对于开发者是及其不友好的,所有的语言的优化都是不断的结构化,系统化,或许swoole太年轻,开发者太苛刻,但是现在这确实是一个难受扩展; 我想swoole至少现在可以将swoole的各个模块功能之间的互相调用进行优化整合,实现功能之间的兼容,以及实现统一的调用方法,避免开发者一头乱撞。