aza / libevent
AzaLibEvent - Simple, powerful and easy to use OOP wrapper for the LibEvent PHP bindings. Component from Anizoptera CMF.
Installs: 28 652
Dependents: 1
Suggesters: 1
Security: 0
Stars: 3
Watchers: 2
Forks: 1
Open Issues: 3
Requires
- php: >=5.2
- aza/clibase: ~1.0
Requires (Dev)
- aza/socket: ~1.0
Suggests
- ext-libevent: Really it's a requirement for normal work.
This package is not auto-updated.
Last update: 2024-10-26 14:03:27 UTC
README
Simple, powerful and easy to use OOP wrapper for the LibEvent PHP bindings.
https://github.com/Anizoptera/AzaLibEvent
Table of Contents
Introduction
Main features:
- Convenient, fully documented and tested in production API;
- Timers and intervals system (look at
EventBase::timerAdd
); - Special base reinitializing for forks (look at
EventBase::reinitialize
); - Error handling with exceptions;
- Automatic resources cleanup;
Requirements
- PHP 5.2.0 (or later);
- libevent;
Installation
The recommended way to install AzaLibEvent is through composer. You can see package information on Packagist.
{ "require": { "aza/libevent": "~1.0" } }
Examples
Example #1 - Polling STDIN using basic API
/** * Callback function to be called when the matching event occurs * * @param resource $fd File descriptor * @param int $events What kind of events occurred. See EV_* constants * @param array $args Event arguments - array(Event $e, mixed $arg) */ function print_line($fd, $events, $args) { static $max_requests = 0; $max_requests++; /** * @var $e Event * @var $base EventBase */ list($e, $base) = $args; // exit loop after 10 writes if ($max_requests == 10) { $base->loopExit(); } // print the line echo fgets($fd); } // Create base $base = new EventBase; // Setup and enable event $ev = new Event(); $ev->set(STDIN, EV_READ|EV_PERSIST, 'print_line', $base) ->setBase($base) ->add(); // Start event loop $base->loop();
Example #2 - Polling STDIN using buffered event API
/** * Callback to invoke where there is data to read * * @param resource $buf File descriptor * @param array $args Event arguments - array(EventBuffer $e, mixed $arg) */ function print_line($buf, $args) { static $max_requests; $max_requests++; /** * @var $e EventBuffer * @var $base EventBase */ list($e, $base) = $args; // exit loop after 10 writes if ($max_requests == 10) { $base->loopExit(); } // print the line echo $e->read(4096); } /** * Callback to invoke where there is an error on the descriptor. * function(resource $buf, int $what, array $args(EventBuffer $e, mixed $arg)) * * @param resource $buf File descriptor * @param int $what What kind of error occurred. See EventBuffer::E_* constants * @param array $args Event arguments - array(EventBuffer $e, mixed $arg) */ function error_func($buf, $what, $args) {} // I use Base::getEventBase() to operate always with the // same instance, but you can simply use "new EventBase()" // Get event base $base = Base::getEventBase(); // Create buffered event $ev = new EventBuffer(STDIN, 'print_line', null, 'error_func', $base); $ev->setBase($base)->enable(EV_READ); // Start loop $base->loop();
Credits
AzaLibEvent is a part of Anizoptera CMF, written by Amal Samally (amal.samally at gmail.com) and AzaGroup team.
License
Released under the MIT license.
Links
- Composer package
- Last build on the Travis CI
- Project profile on the Ohloh
- Other Anizoptera CMF components on the GitHub / Packagist
- (RU) AzaGroup team blog