chh/eventor
PHP的libevent扩展的合理接口。
Requires
- php: >=5.3.3
- ext-libevent: *
This package is not auto-updated.
Last update: 2024-09-14 13:25:13 UTC
README
PHP的 libevent 扩展 的合理接口
安装
通过composer安装
{
"require": {
"chh/eventor": "*"
}
}
然后执行
# Only if you don't have composer:
% wget https://getcomposer.org.cn/composer.phar
% php composer.phar install
示例
<?php
$base = new Eventor\Base;
$fd = STDIN;
# Call the callback every time data is
# written to $fd.
$event = $base->read($fd, function($event) {
static $requests = 0;
$requests++;
if ($requests == 10) {
$event->base->exit();
}
printf("You wrote: %s", fgets($event->fd));
});
$base->loop();
API
class Eventor
方法
Eventor\Event read(resource $fd, callable $callback)
创建一个新的读取事件,并在给定的事件循环中注册该回调。
当数据写入到 $fd
时,回调被调用,并接收一个 Eventor\Event
实例作为唯一的参数。
Eventor\Event write(resource $fd, callable $callback)
创建一个新的写入事件,并在给定的事件循环中注册该回调。
当数据可以写入到 $fd
时,回调被调用,并接收一个 Eventor\Event
实例作为唯一的参数。
add(Eventor\Event $event)
在事件循环中注册手动创建的事件实例。
delete(Eventor\Event $event)
从事件循环中删除事件,这将导致它不再触发回调。
loop()
启动事件循环,这将阻塞,直到所有事件都被分发(如果事件不是持久的)或者调用 Eventor\Base
上的 breakLoop()
或 exit()
方法。
halt()
立即中断循环,类似于在循环中使用 break
关键字。
shutdown(int $timeout = -1)
通过完成下一次分发并在超时后退出,优雅地关闭事件循环。参数 $timeout
接收循环应该退出的微秒数,省略时在下次分发后退出循环。
class Eventor\Event
Event
类对于更底层访问libevent扩展的功能很有用,并且在事件处理器被调用时也会传递给事件处理器。
方法
__construct(resource $fd, int $events, callable $callback)
使用文件描述符和标志初始化事件实例。事件是一个整数,由 Eventor\Event
类中定义的这些常量之一或多个组成
Event::READ
,监听文件描述符的写入。Event::WRITE
Event::SIGNAL
,将文件描述符处理为信号。Event::TIMEOUT
,在超时后触发事件。Event::PERSIST
,事件在处理程序被调用后不会从基础中删除。默认情况下设置为该标志,您必须调用setNonPersistent()
来禁用此标志。
示例
<?php
use Eventor\Event,
Eventor\Base;
$base = new Base;
$event = new Event(STDIN, Event::READ, function($event) {
echo fgets($event->fd);
});
$base->add($event);
$base->loop();
setNonPersistent($enable = true)
将事件设置为非持久模式,通过注册它而不设置 Eventor\Event::PERSIST
标志来实现。这会导致事件处理器只触发一次。
属性
base
此事件绑定到的 Eventor\Base
实例。如果此事件未绑定到任何基础,则为 null
。
callback
当事件就绪时被调用的回调。
fd
此事件绑定的文件描述符的 fd
属性。
许可协议
版权 © 2012 Christoph Hochstrasser
Eventor 在 LICENSE.txt
文件中捆绑的 MIT 许可协议下授权。