현재 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