Skip to content

Commit a72b80d

Browse files
authored
Merge pull request #91 from jsor-labs/readme-improvements
Readme improvements
2 parents ef22aec + 49491cb commit a72b80d

File tree

1 file changed

+99
-27
lines changed

1 file changed

+99
-27
lines changed

README.md

Lines changed: 99 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -8,36 +8,22 @@ Event loop abstraction layer that libraries can use for evented I/O.
88
In order for async based libraries to be interoperable, they need to use the
99
same event loop. This component provides a common `LoopInterface` that any
1010
library can target. This allows them to be used in the same loop, with one
11-
single `run` call that is controlled by the user.
11+
single `run()` call that is controlled by the user.
1212

1313
> The master branch contains the code for the upcoming 0.5 release.
1414
For the code of the current stable 0.4.x release, checkout the
1515
[0.4 branch](https://github.com/reactphp/event-loop/tree/0.4).
1616

17-
In addition to the interface there are some implementations provided:
17+
**Table of Contents**
1818

19-
* `StreamSelectLoop`: This is the only implementation which works out of the
20-
box with PHP. It does a simple `select` system call. It's not the most
21-
performant of loops, but still does the job quite well.
22-
23-
* `LibEventLoop`: This uses the `libevent` pecl extension. `libevent` itself
24-
supports a number of system-specific backends (epoll, kqueue).
25-
26-
* `LibEvLoop`: This uses the `libev` pecl extension
27-
([github](https://github.com/m4rw3r/php-libev)). It supports the same
28-
backends as libevent.
29-
30-
* `ExtEventLoop`: This uses the `event` pecl extension. It supports the same
31-
backends as libevent.
32-
33-
All of the loops support these features:
34-
35-
* File descriptor polling
36-
* One-off timers
37-
* Periodic timers
38-
* Deferred execution of callbacks
19+
* [Quickstart example](#quickstart-example)
20+
* [Usage](#usage)
21+
* [Loop implementations](#loop-implementations)
22+
* [Install](#install)
23+
* [Tests](#tests)
24+
* [License](#license)
3925

40-
## Usage
26+
## Quickstart example
4127

4228
Here is an async HTTP server built with just the event loop.
4329

@@ -46,6 +32,7 @@ $loop = React\EventLoop\Factory::create();
4632

4733
$server = stream_socket_server('tcp://127.0.0.1:8080');
4834
stream_set_blocking($server, 0);
35+
4936
$loop->addReadStream($server, function ($server) use ($loop) {
5037
$conn = stream_socket_accept($server);
5138
$data = "HTTP/1.1 200 OK\r\nContent-Length: 3\r\n\r\nHi\n";
@@ -69,7 +56,92 @@ $loop->addPeriodicTimer(5, function () {
6956
$loop->run();
7057
```
7158

72-
**Note:** The factory is just for convenience. It tries to pick the best
73-
available implementation. Libraries `SHOULD` allow the user to inject an
74-
instance of the loop. They `MAY` use the factory when the user did not supply
75-
a loop.
59+
## Usage
60+
61+
Typical applications use a single event loop which is created at the beginning
62+
and run at the end of the program.
63+
64+
```php
65+
// [1]
66+
$loop = React\EventLoop\Factory::create();
67+
68+
// [2]
69+
$loop->addPeriodicTimer(1, function () {
70+
echo "Tick\n";
71+
});
72+
73+
$stream = new React\Stream\ReadableResourceStream(
74+
fopen('file.txt', 'r'),
75+
$loop
76+
);
77+
78+
// [3]
79+
$loop->run();
80+
```
81+
82+
1. The loop instance is created at the beginning of the program. A convenience
83+
factory `React\EventLoop\Factory::create()` is provided by this library which
84+
picks the best available [loop implementation](#loop-implementations).
85+
2. The loop instance is used directly or passed to library and application code.
86+
In this example, a periodic timer is registered with the event loop which
87+
simply outputs `Tick` every second and a
88+
[readable stream](https://github.com/reactphp/stream#readableresourcestream)
89+
is created by using ReactPHP's
90+
[stream component](https://github.com/reactphp/stream) for demonstration
91+
purposes.
92+
3. The loop is run with a single `$loop->run()` call at the end of the program.
93+
94+
## Loop implementations
95+
96+
In addition to the interface there are the following implementations provided:
97+
98+
* `StreamSelectLoop`: This is the only implementation which works out of the
99+
box with PHP. It does a simple `select` system call. It's not the most
100+
performant of loops, but still does the job quite well.
101+
102+
* `LibEventLoop`: This uses the `libevent` pecl extension. `libevent` itself
103+
supports a number of system-specific backends (epoll, kqueue).
104+
105+
* `LibEvLoop`: This uses the `libev` pecl extension
106+
([github](https://github.com/m4rw3r/php-libev)). It supports the same
107+
backends as libevent.
108+
109+
* `ExtEventLoop`: This uses the `event` pecl extension. It supports the same
110+
backends as libevent.
111+
112+
All of the loops support these features:
113+
114+
* File descriptor polling
115+
* One-off timers
116+
* Periodic timers
117+
* Deferred execution of callbacks
118+
119+
## Install
120+
121+
The recommended way to install this library is [through Composer](http://getcomposer.org).
122+
[New to Composer?](http://getcomposer.org/doc/00-intro.md)
123+
124+
This will install the latest supported version:
125+
126+
```bash
127+
$ composer require react/event-loop
128+
```
129+
130+
## Tests
131+
132+
To run the test suite, you first need to clone this repo and then install all
133+
dependencies [through Composer](http://getcomposer.org):
134+
135+
```bash
136+
$ composer install
137+
```
138+
139+
To run the test suite, go to the project root and run:
140+
141+
```bash
142+
$ php vendor/bin/phpunit
143+
```
144+
145+
## License
146+
147+
MIT, see [LICENSE file](LICENSE).

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy