PHP 日本大会 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()

参数

mode

传递模式标志以接收多部分消息或非阻塞操作。参见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");

/* 将套接字 1 分配给队列,发送和接收 */
$retries = 5;
$sending = true;

/* 开始循环 */
do {
try {
/* 尝试发送/接收 */
if ($sending) {
echo
"正在发送消息\n";
$queue->send("This is a message", 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