- Notifications
You must be signed in to change notification settings - Fork3
React's core reactor event-loop
License
steverhoades/event-loop
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Event loop abstraction layer that libraries can use for evented I/O.
In order for async based libraries to be interoperable, they need to use thesame event loop. This component provides a commonLoopInterface that anylibrary can target. This allows them to be used in the same loop, with onesinglerun call that is controlled by the user.
In addition to the interface there are some implementations provided:
StreamSelectLoop: This is the only implementation which works out of thebox with PHP. It does a simpleselectsystem call. It's not the mostperformant of loops, but still does the job quite well.LibEventLoop: This uses thelibeventpecl extension.libeventitselfsupports a number of system-specific backends (epoll, kqueue).LibEvLoop: This uses thelibevpecl extension(github). It supports the samebackends as libevent.ExtEventLoop: This uses theeventpecl extension. It supports the samebackends as libevent.
All of the loops support these features:
- File descriptor polling
- One-off timers
- Periodic timers
- Deferred execution of callbacks
Here is an async HTTP server built with just the event loop.
$loop =React\EventLoop\Factory::create();$server =stream_socket_server('tcp://127.0.0.1:8080');stream_set_blocking($server,0);$loop->addReadStream($server,function ($server)use ($loop) {$conn =stream_socket_accept($server);$data ="HTTP/1.1 200 OK\r\nContent-Length: 3\r\n\r\nHi\n";$loop->addWriteStream($conn,function ($conn)use (&$data,$loop) {$written =fwrite($conn,$data);if ($written ===strlen($data)) {fclose($conn);$loop->removeStream($conn); }else {$data =substr($data,0,$written); } }); });$loop->addPeriodicTimer(5,function () {$memory =memory_get_usage() /1024;$formatted =number_format($memory,3).'K';echo"Current memory usage:{$formatted}\n"; });$loop->run();
Note: The factory is just for convenience. It tries to pick the bestavailable implementation. LibrariesSHOULD allow the user to inject aninstance of the loop. TheyMAY use the factory when the user did not supplya loop.
About
React's core reactor event-loop
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Languages
- PHP98.6%
- Shell1.4%
