目前,我正在嘗試使用ZMQ發送/接收郵件的簡單代碼。代碼如下未通過ZMQ發送的郵件
/* Create new queue object, there needs to be a server at the other end */
$queue = new ZMQSocket(new ZMQContext(), ZMQ::SOCKET_REQ);
$queue->connect("tcp://127.0.0.1:5555");
/* Assign socket 1 to the queue, send and receive */
$retries = 5;
$sending = true;
/* Start a loop */
do {
try {
/* Try to send/receive */
if ($sending) {
echo "Sending message\n";
$queue->send("This is a message", ZMQ::MODE_NOBLOCK);
$sending = false;
} else {
echo "Got response: " . $queue->recv(ZMQ::MODE_NOBLOCK) . "\n";
echo 'Complete';
break;
}
} catch (ZMQSocketException $e) {
/* EAGAIN means that the operation would have blocked, retry */
if ($e->getCode() === ZMQ::ERR_EAGAIN) {
echo " - Got EAGAIN, retrying ($retries)\n";
} else {
die(" - Error: " . $e->getMessage());
}
}
/* Sleep a bit between operations */
usleep(5);
} while (--$retries);
,當我在控制檯運行此腳本,我的輸出是
Sending message
Got response:
Complete
我相信,雖然沒有引發的錯誤,但是我的消息不實際發送。我也運行netstat
命令,但我沒有發現任何進程監聽端口5555.理想情況下,應該有一個(當前)。但建立連接時不會出現異常情況。 有什麼我失蹤?
謝謝。我會檢查這一點。實際上這個代碼是從php.net文檔站點 –
挑選的。我也沒有找到任何指南,說我們需要像rabbitmq一樣啓動zmq服務器。您可以請我指點指南,說明如何啓動zmq服務器? –
所以......你是說這是你運行的唯一腳本?當我說「服務器」時,我的意思是「你想發送消息到另一個腳本,並且會迴應」。如果您沒有運行ZMQ的任何其他進程發送到,那麼您當然不會發送或獲取響應。 – Jason