chh/eventor

PHP的libevent扩展的合理接口。

dev-master 2012-03-23 18:07 UTC

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 许可协议下授权。