-
Notifications
You must be signed in to change notification settings - Fork 70
/
poll.xml
174 lines (157 loc) · 5.99 KB
/
poll.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: d530899344cd881b6d09ff188e24252651c2f394 Maintainer: rjhdby Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="zmqpoll.poll" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>ZMQPoll::poll</refname>
<refpurpose>Опросить все элементы пула</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<modifier>public</modifier> <type>int</type><methodname>ZMQPoll::poll</methodname>
<methodparam><type>array</type><parameter role="reference">readable</parameter></methodparam>
<methodparam><type>array</type><parameter role="reference">writable</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>timeout</parameter><initializer>-1</initializer></methodparam>
</methodsynopsis>
<para>
Опрашивает все элементы пула. Читаемые и записываемые элементы помещаются в
параметры <parameter>readable</parameter> и <parameter>writable</parameter>
соответственно.
Для проверки возникших ошибок используйте метод
<function>ZMQPoll::getLastErrors</function>.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>readable</parameter></term>
<listitem>
<para>
Массив, в который будут возвращены читаемые объекты ZMQSockets/потоки PHP.
Перед началом работы массив будет очищен.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>writable</parameter></term>
<listitem>
<para>
Массив, в который будут возвращены записываемые объекты ZMQSockets/потоки PHP.
Перед началом работы массив будет очищен.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>timeout</parameter></term>
<listitem>
<para>
Время ожидания операции. -1 означает, что опрос будет
ждать до последнего. Обратите внимание, что с версии
1.0.0, время ожидания задаётся в миллисекундах, а не в
микросекундах, как раньше.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Возвращает количество элементов, для которых происходила какая либо активность.
</para>
</refsect1>
<refsect1 role="errors">
&reftitle.errors;
<para>
Выбрасывает <classname>ZMQPollException</classname> в случае возникновения ошибки.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Пример использования <function>ZMQPoll</function></title>
<para>
Создадим простой сервер опроса
</para>
<programlisting role="php">
<![CDATA[
<?php
/* Создаём сокет, паттерн request-reply (отвечающий сокет) */
$context = new ZMQContext();
$server = $context->getSocket(ZMQ::SOCKET_REP);
/* Привязываем к порту 5555 на адрес 127.0.0.1 */
$server->bind("tcp://127.0.0.1:5555");
/* Создаём новый пул опроса для входящих/исходящих сообщений */
$poll = new ZMQPoll();
/* Добавляем объект и слушаем на предмет опроса входящих/исходящих */
$id = $poll->add($server, ZMQ::POLL_IN | ZMQ::POLL_OUT);
echo "Added object with 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 "Ошибка получения: " . $e->getMessage() . "\n";
}
}
/* Перебираем записываемые объекты и отправляем ответы */
foreach ($writable as $w) {
try {
$w->send("Получил!");
} catch (ZMQException $e) {
echo "Ошибка отправки: " . $e->getMessage() . "\n";
}
}
}
}
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->