ZMQPoll::poll

(PECL zmq >= 0.5.0)

ZMQPoll::poll轮询项目

描述

public ZMQPoll::poll(array &$readable, array &$writable, int $timeout = -1): int

轮询当前轮询集中包含的项目。可读和可写项目在 readablewritable 参数中返回。 ZMQPoll::getLastErrors() 可用于检查是否有错误。

参数

readable

返回可读 ZMQSockets/PHP 流的数组。数组将在操作开始时被清除。

writable

返回可写 ZMQSockets/PHP 流的数组。数组将在操作开始时被清除。

timeout

操作的超时时间。-1 表示轮询将等待直到至少有一个项目具有活动性。请注意,从 1.0.0 版本开始,轮询超时时间以毫秒定义,而不是微秒。

返回值

返回一个整数,表示具有活动性的项目的数量。

错误/异常

在错误时抛出 ZMQPollException

示例

示例 #1 一个 ZMQPoll() 示例

创建一个简单的轮询服务器

<?php

/* 创建套接字,请求-回复模式(回复套接字) */
$context = new ZMQContext();
$server = $context->getSocket(ZMQ::SOCKET_REP);

/* 绑定到 127.0.0.1 上的端口 5555 */
$server->bind("tcp://127.0.0.1:5555");

/* 为传入/传出消息创建新的轮询集 */
$poll = new ZMQPoll();

/* 添加对象并监听轮询输入/输出 */
$id = $poll->add($server, ZMQ::POLL_IN | ZMQ::POLL_OUT);
echo
"添加了对象,ID 为 " . $id . "\n";

/* 初始化可读和可写数组 */
$readable = array();
$writable = array();

while (
true) {
/* 获取的事件数量 */
$events = 0;

try {
/* 轮询直到有事情要做 */
$events = $poll->poll($readable, $writable, -1);
$errors = $poll->getLastErrors();

if (
count($errors) > 0) {
foreach (
$errors as $error) {
echo
"轮询对象错误 " . $error . "\n";
}
}
} catch (
ZMQPollException $e) {
echo
"轮询失败: " . $e->getMessage() . "\n";
}

if (
$events > 0) {
/* 循环遍历可读对象并接收消息 */
foreach ($readable as $r) {
try {
echo
"接收到的消息: " . $r->recv() . "\n";
} catch (
ZMQException $e) {
echo
"recv 失败: " . $e->getMessage() . "\n";
}
}

/* 循环遍历可写对象并发送回消息 */
foreach ($writable as $w) {
try {
$w->send("Got it!");
} catch (
ZMQException $e) {
echo
"send 失败: " . $e->getMessage() . "\n";
}
}
}
}
?>

添加注释

用户贡献注释

此页面没有用户贡献注释。
To Top