swoole_process->useQueue [编辑本页]

启用消息队列作为进程间通信。

bool swoole_process->useQueue(int $msgkey = 0, int $mode = 2);

useQueue方法接受2个可选参数。

  • $msgkey是消息队列的key,默认会使用ftok(__FILE__, 1)作为KEY
  • $mode通信模式,默认为2,表示争抢模式,所有创建的子进程都会从队列中取数据
  • 如果创建消息队列失败,会返回false。可使用swoole_strerror(swoole_errno()) 得到错误码和错误信息。

使用模式2后,创建的子进程无法进行单独通信,比如发给特定子进程。
$process对象并未执行start,也可以执行push/pop向队列推送/提取数据
消息队列通信方式与管道不可共用。消息队列不支持EventLoop,使用消息队列后只能使用同步阻塞模式

非阻塞

1.9.2或更高版本中增加了swoole_process::IPC_NOWAIT的支持,可将队列设置为非阻塞。在非阻塞模式下,队列已满调用push方法、队列已空调用pop方法时将不再阻塞立即返回。

//设置为非阻塞模式
$process->useQueue($key, $mode | swoole_process::IPC_NOWAIT);

  • NewbMiao

    参数列表有没有。。。

  • 小eyes

    swoole_process->useQueue,消息队列可以与事件循环结合? swoole_event_add($worker->pipe, function($pipe) use($worker) { $recv= $worker->pop(); $res = getInfo($recv); // send data to master $worker->push("{$recv} result is:".json_encode($res).PHP_EOL); }); 这样写不起作用

  • 左树文

    在下一节

  • jonliu

    发现swoole消息队列无法清空,请问有没有清空的函数。

  • 妖杀者

    freeQueue