0MQ messaging ZMQSocket::recv

(PECL zmq >= 0.5.0)

ZMQSocket::recv — 메시지 수신


설명

public ZMQSocket::recv(int $mode = 0): string

소켓에서 메시지를 받습니다. 기본적으로 수신은 ZMQ::MODE_DONTWAIT 플래그가 사용되지 않는 한 메시지를 사용할 수 있을 때까지 차단됩니다. ZMQ::SOCKOPT_RCVMORE 소켓 옵션은 다중 부분 메시지를 수신하는 데 사용할 수 있습니다. 자세한 내용은 ZMQSocket::setSockOpt()를 참조하십시오.


매개변수

mode
멀티파트 메시지 또는 비차단 작업을 수신하기 위해 모드 플래그를 전달합니다. ZMQ::MODE_* 상수를 참조하십시오.

반환 값

메시지를 반환합니다. ZMQ::MODE_DONTWAIT가 사용되고 작업이 false를 차단하는 경우 반환됩니다.


오류/예외

오류가 발생하면 ZMQSocketException을 던집니다.


Examples

예제 #1 send/recv 예제

논블로킹 송신/수신

                  
<?php
/* 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_DONTWAIT);
            $sending = false;
        } else {
            echo "Got response: " . $queue->recv(ZMQ::MODE_DONTWAIT) . "\n";
            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
 - Unable to execute operation, retrying (4)
Got response: This is a message