我在ZeroMQ上遇到了一个奇怪的问题,其中一些消息被卡住,而新消息到达时才被卡住。就像新邮件将卡住的邮件推送到门上一样(我知道这很糟糕)。
我的代码很简单:
rep.php
$context = new ZMQContext;
$receiver = new ZMQSocket($context, ZMQ::SOCKET_PULL);
$receiver->connect("tcp://localhost:8022");
$receiver2 = new ZMQSocket($context, ZMQ::SOCKET_PULL);
$receiver2->connect("tcp://localhost:8024");
for (;;) {
echo $receiver->recv() . PHP_EOL;
echo $receiver2->recv() . PHP_EOL;
}
$context = new ZMQContext;
$work = new ZMQSocket($context, ZMQ::SOCKET_PUSH);
$work->bind('tcp://*:8022');
$work->send('Hello World');
最佳答案
我不是PHP专家,但猜测语法和功能。如果我错了请指正我
echo $receiver->recv() . ' - ' . $receiver2->recv();
$receiver->recv()
阻止,直到接收到某些消息为止。 echo
不会立即回显消息$receiver2->recv()
$receiver2->recv()
$poll = new ZMQPoll();
$poll->add($receiver, ZMQ::POLL_IN);
$poll->add($receiver2, ZMQ::POLL_IN);
$readable = $writeable = array();
while(true) {
$events = $poll->poll($readable, $writeable);
foreach($readable as $socket) {
$message = $socket->recv();
echo $message, PHP_EOL;
}
}
https://stackoverflow.com/questions/11164474/