PHP 0mq接收不接收消息

时间:2015-06-24 06:51:06

标签: php zeromq

我在PHP中实现了0mq呼吸机/工作者/接收器示例。呼吸机向工作人员发送消息。工作人员收到这些消息并将结果发送到接收器。

工作人员正确接收消息,但接收器从未收到他们的回复。我做错了什么?

在Virtualbox VM中使用PHP 5.5.9-1ubuntu4.9和libzmq v2.2.0。

呼吸机:

$context = new ZMQContext();
$sender = new ZMQSocket($context, ZMQ::SOCKET_PUSH);
$sender->bind('tcp://*:5557');
echo 'Sending IDs to workers...', PHP_EOL;
for ($i = 0; $i < 100; $i ++) {
    $sender->send($i);
}

工人:

$context = new ZMQContext();
$receiver = new ZMQSocket($context, ZMQ::SOCKET_PULL);
$receiver->connect('tcp://localhost:5557');
$sender = new ZMQSocket($context, ZMQ::SOCKET_PUSH);
$sender->connect('tcp://localhost:5558');
while (true) {
    $i = $receiver->recv();
    echo 'Processing ', $i, PHP_EOL;
    $sender->send($i * 2);
}

水槽:

$context = new ZMQContext();
$receiver = new ZMQSocket($context, ZMQ::SOCKET_PULL);
$receiver->connect('tcp://*:5558');
echo 'Receiving rows from workers...', PHP_EOL;
while (true) {
    $result = $receiver->recv();
    echo $result, PHP_EOL;
}

结果:

工人说'处理0 - 99 ......'但是接收器没有输出。

预期:

接收器输出0,2,4,6,8等

1 个答案:

答案 0 :(得分:1)

愚蠢的错误。接收器应该使用bind()而不是connect()。解决。