(PECL zmq >= 0.5.0)

ZMQSocket::recvReceives a message


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

Receive a message from a socket. By default receiving will block until a message is available unless ZMQ::MODE_DONTWAIT flag is used. ZMQ::SOCKOPT_RCVMORE socket option can be used for receiving multi-part messages. See ZMQSocket::setSockOpt() for more information.



Pass mode flags to receive multipart messages or non-blocking operation. See ZMQ::MODE_* constants.


Returns the message. If ZMQ::MODE_DONTWAIT is used and the operation would block false shall be returned.

エラー / 例外

Throws ZMQSocketException on error.

例1 A send/recv example

Non-blocking send / receive


/* Create new queue object, there needs to be a server at the other end */
$queue = new ZMQSocket(new ZMQContext(), ZMQ::SOCKET_REQ);

/* Assign socket 1 to the queue, send and receive */
$retries 5;
$sending true;

/* Start a loop */
do {
    try {
/* Try to send / receive */
if ($sending) {
"Sending message\n";
$queue->send("This is a message"ZMQ::MODE_DONTWAIT);
$sending false;
        } else {
"Got response: " $queue->recv(ZMQ::MODE_DONTWAIT) . "\n";
    } catch (
ZMQSocketException $e) {
/* EAGAIN means that the operation would have blocked, retry */
if ($e->getCode() === ZMQ::ERR_EAGAIN) {
" - Got EAGAIN, retrying ($retries)\n";
        } else {
" - Error: " $e->getMessage());
/* Sleep a bit between operations */
} while (--

上の例の出力は、 たとえば以下のようになります。

Sending message
 - Unable to execute operation, retrying (4)
Got response: This is a message

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top