-
Notifications
You must be signed in to change notification settings - Fork 70
/
recv.xml
138 lines (128 loc) · 4.61 KB
/
recv.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
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: d530899344cd881b6d09ff188e24252651c2f394 Maintainer: rjhdby Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="zmqsocket.recv" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>ZMQSocket::recv</refname>
<refpurpose>Получить сообщение</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<modifier>public</modifier> <type>string</type><methodname>ZMQSocket::recv</methodname>
<methodparam choice="opt"><type>int</type><parameter>mode</parameter><initializer>0</initializer></methodparam>
</methodsynopsis>
<para>
Получает сообщение из сокета. По умолчанию получение будет блокироваться до тех
пор, пока сообщение не будет доступно, только если не установлен флаг
<constant>ZMQ::MODE_DONTWAIT</constant>.
Можно использовать опцию сокета <constant>ZMQ::SOCKOPT_RCVMORE</constant>
для получения сообщений состоящих из нескольких частей.
Более подробно смотрите <function>ZMQSocket::setSockOpt</function>.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>mode</parameter></term>
<listitem>
<para>
Флаги для настройки режима не блокирующего получения и работы с
сообщениями, состоящими из нескольких частей.
Смотрите константы <constant>ZMQ::MODE_*</constant>.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Возвращает сообщение. Если используется режим <constant>ZMQ::MODE_DONTWAIT</constant> и операция
заблокирована, то будет возвращено &false;.
</para>
</refsect1>
<refsect1 role="errors">
&reftitle.errors;
<para>
Выбрасывает <classname>ZMQSocketException</classname> в случае возникновения ошибки.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Пример отправки/получения</title>
<para>
Не блокирующая отправка/получение
</para>
<programlisting role="php">
<![CDATA[
<?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("Я сообщение!", 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);
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
Отправляем сообщение
- Получили EAGAIN, повторяем (4)
Получен ответ: Я сообщение!
]]>
</screen>
</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
-->