ZeroMQ + ReactPHP:多个生产者(推)和多个消费者(拉)

ZeroMQ + ReactPHP: Multiple producers (push) and multiple consumers (pull)

我正在使用 reactphp/zmq

我怎样才能在多个拉式工作器中有多个推式工作器,这可能吗?

A only 可以有 multi pull 和 single push,如 README 的例子:

$push->connect()
$pull->bind()

或者单拉多推:

$push->bind()
$pull->connect()

当我尝试将两者都设置为 connect 时,拉动没有收到消息

否则,尝试使用 bind 启动多个进程会抛出:

ZMQSocketException: Failed to bind the ZMQ: Address in use

我应该有一个中间件吗?

(5555)                      (5556)
push -|  (5555) > (5556)   |- pull
push -|-> pull  &  push <- |- pull
push -|   bind  /  bind    |- pull
connect                    connect
(5555)                      (5556)
push -|  (5555) > (5556)   |- pull
push -|-> pull  &  push <- |- pull
push -|   bind  /  bind    |- pull
connect                    connect

这和ZMQPoll的思路很像。不好你不需要使用 reactphp/zmq

您可以运行 使用 ZMQPoll 进行处理。本进程可以绑定在5555和5556上,其他进程可以推送和拉取消息。

my example how it can be work

more examples on official ZMQ site

PHP example poller from official site

UPD: 如果您需要其他解决方案,look at ZMQProxy

啊哈!非常感谢 @Mjh 澄清事情。

原来我确实需要中间的东西,它应该是一个消息队列代理,而 ZMQ 确实有一些东西。内部调用 zmq_proxy 开始一个 rrbroker 循环,不幸的是,这些家伙并没有在 reactphp/zmq 处被抽象化,但它们在 ext-php 到 ZMQDevice.

来源:http://zguide.zeromq.org/php:chapter2#ZeroMQ-s-Built-In-Proxy-Function