PHP Conference Japan 2024

ZMQSocket::recv

(PECL zmq >= 0.5.0)

ZMQSocket::recv接收訊息

說明

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

從通訊端接收訊息。預設情況下,接收將會阻塞,直到有訊息可用,除非使用 ZMQ::MODE_DONTWAIT 旗標。可以使用 ZMQ::SOCKOPT_RCVMORE 通訊端選項來接收多部分訊息。詳情請參閱 ZMQSocket::setSockOpt()

參數

模式

傳遞模式旗標以接收多段訊息或執行非阻塞操作。請參閱 ZMQ::MODE_* 常數。

回傳值

回傳訊息。如果使用 ZMQ::MODE_DONTWAIT 且操作會阻塞,則會回傳 false

錯誤/例外

發生錯誤時,會拋出 ZMQSocketException 例外。

範例

範例 #1 發送/接收範例

非阻塞發送/接收

<?php

/* 建立新的佇列物件,另一端需要有一個伺服器 */
$queue = new ZMQSocket(new ZMQContext(), ZMQ::SOCKET_REQ);
$queue->connect("tcp://127.0.0.1:5555");

/* 將 socket 1 指派給佇列,進行發送和接收 */
$retries = 5;
$sending = true;

/* 開始迴圈 */
do {
try {
/* 嘗試發送/接收 */
if ($sending) {
echo
"正在發送訊息\n";
$queue->send("這是一則訊息", ZMQ::MODE_DONTWAIT);
$sending = false;
} else {
echo
"收到回應: " . $queue->recv(ZMQ::MODE_DONTWAIT) . "\n";
break;
}
} catch (
ZMQSocketException $e) {
/* EAGAIN 表示操作將會阻塞,重試 */
if ($e->getCode() === ZMQ::ERR_EAGAIN) {
echo
" - 發生 EAGAIN,正在重試 ($retries)\n";
} else {
die(
" - 錯誤: " . $e->getMessage());
}
}
/* 操作之間稍作延遲 */
usleep(5);
} while (--
$retries);
?>

上述範例將會輸出類似以下的內容

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

新增註解

使用者貢獻的註解

此頁面沒有使用者貢獻的註解。
To Top