Skip to content

Commit 4d51840

Browse files
committed
optimize swoole event
1 parent 09324fb commit 4d51840

File tree

10 files changed

+483
-88
lines changed

10 files changed

+483
-88
lines changed

reference/swoole/swoole.event.xml

Lines changed: 71 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,81 @@
1212
<section xml:id="swoole-event.intro">
1313
&reftitle.intro;
1414
<para>
15-
15+
The Swoole extension provides low-level interfaces to directly manipulate the underlying epoll/kqueue/poll/select event loop.
16+
It allows adding sockets created by other extensions or PHP's stream/socket extensions to Swoole's EventLoop.
1617
</para>
18+
<note>
19+
<para>
20+
The Event module is low-level, being a basic encapsulation of epoll. Users should have experience with IO multiplexing programming.
21+
</para>
22+
</note>
1723
</section>
1824
<!-- }}} -->
1925

26+
<section xml:id="swoole-event.event-priority">
27+
<title>Event Priority</title>
28+
<orderedlist>
29+
<listitem><para>Signal handler callback functions set via Process::signal</para></listitem>
30+
<listitem><para>Timer callback functions set via Timer::tick and Timer::after</para></listitem>
31+
<listitem><para>Deferred execution functions set via Event::defer</para></listitem>
32+
<listitem><para>Periodic callback functions set via Event::cycle</para></listitem>
33+
</orderedlist>
34+
</section>
35+
36+
<section xml:id="swoole-event.event-socket">
37+
<title>Swoole Event Socket Type</title>
38+
<para>
39+
<variablelist>
40+
<varlistentry xml:id="swoole-event.int">
41+
<term>
42+
<parameter>fd</parameter>
43+
<type>int</type>
44+
</term>
45+
<listitem>
46+
<para>
47+
File descriptors, including Swoole\Client->$sock, Swoole\Process->$pipe, or any other file descriptor (fd).
48+
</para>
49+
</listitem>
50+
</varlistentry>
51+
<varlistentry xml:id="swoole-event.stream">
52+
<term>
53+
<parameter>stream resource</parameter>
54+
<type>resource</type>
55+
</term>
56+
<listitem>
57+
<para>
58+
Resources created by stream_socket_client/fsockopen.
59+
</para>
60+
</listitem>
61+
</varlistentry>
62+
<varlistentry xml:id="swoole-event.socket">
63+
<term>
64+
<parameter>socket resource</parameter>
65+
<type>resource</type>
66+
</term>
67+
<listitem>
68+
<para>
69+
Resources created by socket_create from the sockets extension require
70+
the --enable-sockets flag during Swoole compilation.
71+
</para>
72+
</listitem>
73+
</varlistentry>
74+
<varlistentry xml:id="swoole-event.object">
75+
<term>
76+
<parameter>object</parameter>
77+
<type>object</type>
78+
</term>
79+
<listitem>
80+
<para>
81+
Swoole automatically converts Swoole\Process into UnixSocket and Swoole\Client
82+
into connected client sockets at the underlying level.
83+
</para>
84+
</listitem>
85+
</varlistentry>
86+
</variablelist>
87+
</para>
88+
</section>
89+
2090
<section xml:id="swoole-event.synopsis">
2191
&reftitle.classsynopsis;
2292

reference/swoole/swoole/event/add.xml

Lines changed: 40 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,64 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<!-- $Revision$ -->
3-
43
<refentry xml:id="swoole-event.add" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
54
<refnamediv>
65
<refname>Swoole\Event::add</refname>
7-
<refpurpose>Add new callback functions of a socket into the EventLoop.</refpurpose>
6+
<refpurpose>Add a socket to the underlying reactor event listener</refpurpose>
87
</refnamediv>
98

109
<refsect1 role="description">
1110
&reftitle.description;
1211
<methodsynopsis>
1312
<modifier>public</modifier> <modifier>static</modifier> <type>bool</type><methodname>Swoole\Event::add</methodname>
14-
<methodparam><type>int</type><parameter>fd</parameter></methodparam>
13+
<methodparam><type>mixed</type><parameter>sock</parameter></methodparam>
1514
<methodparam><type>callable</type><parameter>read_callback</parameter></methodparam>
1615
<methodparam choice="opt"><type>callable</type><parameter>write_callback</parameter></methodparam>
17-
<methodparam choice="opt"><type>string</type><parameter>events</parameter></methodparam>
16+
<methodparam choice="opt"><type>int</type><parameter>flags</parameter></methodparam>
1817
</methodsynopsis>
1918
<para>
20-
19+
Adds a socket to the underlying reactor event listener. This function can be used in both Server and Client modes.
2120
</para>
22-
21+
<warning>
22+
<para>
23+
A socket that has already been added cannot be added again. Use swoole_event_set to
24+
modify the corresponding callback functions and event types for the socket.
25+
</para>
26+
</warning>
2327
</refsect1>
2428

2529
<refsect1 role="parameters">
2630
&reftitle.parameters;
2731
<variablelist>
2832
<varlistentry>
29-
<term><parameter>fd</parameter></term>
33+
<term><parameter>sock</parameter></term>
3034
<listitem>
3135
<para>
32-
36+
File descriptor, stream resource, sockets resource, or object.
3337
</para>
3438
</listitem>
3539
</varlistentry>
3640
<varlistentry>
3741
<term><parameter>read_callback</parameter></term>
3842
<listitem>
3943
<para>
40-
44+
Callback function for readable events.
4145
</para>
4246
</listitem>
4347
</varlistentry>
4448
<varlistentry>
4549
<term><parameter>write_callback</parameter></term>
4650
<listitem>
4751
<para>
48-
52+
Callback function for writable events.
4953
</para>
5054
</listitem>
5155
</varlistentry>
5256
<varlistentry>
53-
<term><parameter>events</parameter></term>
57+
<term><parameter>flags</parameter></term>
5458
<listitem>
5559
<para>
56-
60+
Event type mask (e.g. <constant>SWOOLE_EVENT_READ</constant>, <constant>SWOOLE_EVENT_WRITE</constant>
61+
or <constant>SWOOLE_EVENT_READ</constant> | <constant>SWOOLE_EVENT_WRITE</constant>).
5762
</para>
5863
</listitem>
5964
</varlistentry>
@@ -63,11 +68,33 @@
6368
<refsect1 role="returnvalues">
6469
&reftitle.returnvalues;
6570
<para>
66-
71+
&return.success;
6772
</para>
6873
</refsect1>
6974

75+
<refsect1 role="examples">
76+
&reftitle.examples;
77+
<para>
78+
<example>
79+
<title><function>Swoole\Event::add</function> example</title>
80+
<programlisting role="php">
81+
<![CDATA[
82+
<?php
83+
$fp = stream_socket_client("tcp://www.qq.com:80", $errno, $errstr, 30);
84+
fwrite($fp,"GET / HTTP/1.1\r\nHost: www.qq.com\r\n\r\n");
7085
86+
Swoole\Event::add($fp, function($fp) {
87+
$resp = fread($fp, 8192);
88+
Swoole\Event::del($fp);
89+
fclose($fp);
90+
});
91+
echo "Finish\n";
92+
?>
93+
]]>
94+
</programlisting>
95+
</example>
96+
</para>
97+
</refsect1>
7198
</refentry>
7299

73100
<!-- Keep this comment at the end of the file
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<!-- $Revision$ -->
3+
<refentry xml:id="swoole-event.cycle" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
4+
<refnamediv>
5+
<refname>Swoole\Event::cycle</refname>
6+
<refpurpose>Define a function to execute at the end of each event loop iteration</refpurpose>
7+
</refnamediv>
8+
9+
<refsect1 role="description">
10+
&reftitle.description;
11+
<methodsynopsis>
12+
<modifier>public</modifier> <modifier>static</modifier> <type>bool</type><methodname>Swoole\Event::cycle</methodname>
13+
<methodparam><type>callable</type><parameter>callback</parameter></methodparam>
14+
<methodparam choice="opt"><type>bool</type><parameter>before</parameter><initializer>false</initializer></methodparam>
15+
</methodsynopsis>
16+
<para>
17+
Defines a callback function to execute at the end (or beginning, if <parameter>before</parameter> is true) of each event loop iteration.
18+
</para>
19+
</refsect1>
20+
21+
<refsect1 role="parameters">
22+
&reftitle.parameters;
23+
<variablelist>
24+
<varlistentry>
25+
<term><parameter>callback</parameter></term>
26+
<listitem>
27+
<para>
28+
The function to execute. Set to <literal>null</literal> to clear a previously set cycle function.
29+
</para>
30+
</listitem>
31+
</varlistentry>
32+
<varlistentry>
33+
<term><parameter>before</parameter></term>
34+
<listitem>
35+
<para>
36+
If <literal>true</literal>, the callback executes before the event loop; if <literal>false</literal>, after.
37+
</para>
38+
</listitem>
39+
</varlistentry>
40+
</variablelist>
41+
</refsect1>
42+
43+
<refsect1 role="returnvalues">
44+
&reftitle.returnvalues;
45+
<para>
46+
&return.success;
47+
</para>
48+
</refsect1>
49+
50+
<refsect1 role="examples">
51+
&reftitle.examples;
52+
<para>
53+
<example>
54+
<title>Basic usage</title>
55+
<programlisting role="php">
56+
<![CDATA[
57+
<?php
58+
Swoole\Timer::tick(2000, function ($id) {
59+
var_dump($id);
60+
});
61+
62+
Swoole\Event::cycle(function () {
63+
echo "hello [1]\n";
64+
Swoole\Event::cycle(function () {
65+
echo "hello [2]\n";
66+
Swoole\Event::cycle(null);
67+
});
68+
});
69+
70+
Swoole\Event::wait();
71+
]]>
72+
</programlisting>
73+
</example>
74+
</para>
75+
</refsect1>
76+
</refentry>
77+
78+
<!-- Keep this comment at the end of the file
79+
Local variables:
80+
mode: sgml
81+
sgml-omittag:t
82+
sgml-shorttag:t
83+
sgml-minimize-attributes:nil
84+
sgml-always-quote-attributes:t
85+
sgml-indent-step:1
86+
sgml-indent-data:t
87+
indent-tabs-mode:nil
88+
sgml-parent-document:nil
89+
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
90+
sgml-exposed-tags:nil
91+
sgml-local-catalogs:nil
92+
sgml-local-ecat-files:nil
93+
End:
94+
vim600: syn=xml fen fdm=syntax fdl=2 si
95+
vim: et tw=78 syn=sgml
96+
vi: ts=1 sw=1
97+
-->

reference/swoole/swoole/event/defer.xml

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,60 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<!-- $Revision$ -->
3-
43
<refentry xml:id="swoole-event.defer" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
54
<refnamediv>
65
<refname>Swoole\Event::defer</refname>
7-
<refpurpose>Add a callback function to the next event loop.</refpurpose>
6+
<refpurpose>Execute a function at the start of the next event loop</refpurpose>
87
</refnamediv>
98

109
<refsect1 role="description">
1110
&reftitle.description;
1211
<methodsynopsis>
1312
<modifier>public</modifier> <modifier>static</modifier> <type>void</type><methodname>Swoole\Event::defer</methodname>
14-
<methodparam><type>mixed</type><parameter>callback</parameter></methodparam>
13+
<methodparam><type>callable</type><parameter>callback_function</parameter></methodparam>
1514
</methodsynopsis>
1615
<para>
17-
16+
Schedules a function to run at the start of the next event loop iteration.
1817
</para>
19-
2018
</refsect1>
2119

2220
<refsect1 role="parameters">
2321
&reftitle.parameters;
2422
<variablelist>
2523
<varlistentry>
26-
<term><parameter>callback</parameter></term>
24+
<term><parameter>callback_function</parameter></term>
2725
<listitem>
2826
<para>
29-
27+
Callback function to execute (no parameters allowed; use <literal>use</literal> for closure variables).
3028
</para>
3129
</listitem>
3230
</varlistentry>
3331
</variablelist>
3432
</refsect1>
35-
33+
3634
<refsect1 role="returnvalues">
3735
&reftitle.returnvalues;
3836
<para>
39-
37+
No return value.
38+
</para>
39+
</refsect1>
40+
41+
<refsect1 role="examples">
42+
&reftitle.examples;
43+
<para>
44+
<example>
45+
<title><function>Swoole\Event::defer</function> example</title>
46+
<programlisting role="php">
47+
<![CDATA[
48+
<?php
49+
Swoole\Event::defer(function(){
50+
echo "After EventLoop\n";
51+
});
52+
?>
53+
]]>
54+
</programlisting>
55+
</example>
4056
</para>
4157
</refsect1>
42-
43-
4458
</refentry>
4559

4660
<!-- Keep this comment at the end of the file

0 commit comments

Comments
 (0)