Network programming ZeroMQ中的卡住消息
我在ZeroMQ上遇到了一个奇怪的问题,其中一些消息被卡住,当新消息到达时就松开。这就像新的信息推门上卡住的信息(可怕的比较,我知道) 我的代码非常简单: rep.phpNetwork programming ZeroMQ中的卡住消息,network-programming,message-queue,zeromq,Network Programming,Message Queue,Zeromq,我在ZeroMQ上遇到了一个奇怪的问题,其中一些消息被卡住,当新消息到达时就松开。这就像新的信息推门上卡住的信息(可怕的比较,我知道) 我的代码非常简单: rep.php $context = new ZMQContext; $receiver = new ZMQSocket($context, ZMQ::SOCKET_PULL); $receiver->connect("tcp://localhost:8022"); $receiver2 = new ZMQSocket($context
$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;
}
cnt.php和cnt2.php(相同的代码,不同的端口)
cnt.php发送到8022,cnt2.php发送到8024。它们不时地被执行,并向rep.php发送消息。但是,有些消息被卡住了。如果我从cnt.php发送了4条消息,没有收到任何消息,但是当我从cnt2.php发送1条消息时,我一次收到5条消息。有什么想法吗?我不是PHP专家,只是在猜测语法和功能。如果我错了,请纠正我
echo $receiver->recv() . ' - ' . $receiver2->recv();
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;
}
}
改编自:变量名的选择很有启发性,您可以不使用它,但这并不重要=/如果我回显$receiver->recv(),然后回显$receiver2->recv(),会怎么样?rep.php不是一个脚本,它一直在运行,等待接收消息。我已经改变了行为,消息仍然会被卡住。检查我的编辑。@vinnylinux:我已经添加了关于如何更改red.php的注释。看到它可能有PHP错误,因为我不知道PHP。我还添加了应该有用的指针
$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;
}
}