PHP Conference Japan 2024

EventBufferEvent 类

(PECL event >= 1.2.6-beta)

简介

表示 Libevent 的缓冲区事件。

通常,应用程序除了响应事件之外,还希望执行一定数量的数据缓冲。例如,当我们想要写入数据时,通常的模式如下所示

  1. 决定我们要将一些数据写入连接;将这些数据放入缓冲区。

  2. 等待连接变为可写

  3. 写入尽可能多的数据

  4. 记住我们写了多少,如果我们还有更多数据要写,则等待连接再次变为可写。

这种缓冲 I/O 模式非常常见,因此 Libevent 为其提供了一种通用机制。“缓冲区事件”由底层传输(如套接字)、读取缓冲区和写入缓冲区组成。缓冲区事件不会像常规事件那样在底层传输准备好读取或写入时提供回调,而是在读取或写入足够数据时调用其用户提供的回调。

类概要

final class EventBufferEvent {
/* 常量 */
const int READING = 1;
const int WRITING = 2;
const int EOF = 16;
const int ERROR = 32;
const int TIMEOUT = 64;
const int CONNECTED = 128;
const int OPT_THREADSAFE = 2;
const int SSL_OPEN = 0;
const int SSL_CONNECTING = 1;
const int SSL_ACCEPTING = 2;
/* 属性 */
public int $fd;
public int $priority;
public readonly EventBuffer $input;
public readonly EventBuffer $output;
/* 方法 */
public close(): void
public connect( string $addr ): bool
public connectHost(
     EventDnsBase $dns_base,
     string $hostname,
     int $port,
     int $family = EventUtil::AF_UNSPEC
): bool
public __construct(
     EventBase $base,
     mixed $socket = null,
     int $options = 0,
     callable $readcb = null,
     callable $writecb = null,
     callable $eventcb = null,
     mixed $arg = null
)
public static createPair( EventBase $base , int $options = 0 ): array
public disable( int $events ): bool
public enable( int $events ): bool
public free(): void
public getEnabled(): int
public read( int $size ): string
public readBuffer( EventBuffer $buf ): bool
public setCallbacks(
     callable $readcb,
     callable $writecb,
     callable $eventcb,
     混合 $arg = ?
):
public setPriority( int $priority ): 布尔值
public setTimeouts( float $timeout_read , float $timeout_write ): 布尔值
public setWatermark( int $events , int $lowmark , int $highmark ):
public static sslFilter(
     EventBase $base,
     EventBufferEvent $underlying,
     EventSslContext $ctx,
     int $state,
     int $options = 0
): EventBufferEvent
public static sslSocket(
     EventBase $base,
     混合 $socket,
     EventSslContext $ctx,
     int $state,
     int $options = ?
): EventBufferEvent
public write( 字符串 $data ): 布尔值
}

属性

fd

与缓冲事件关联的数字文件描述符。通常表示已绑定的套接字。如果缓冲事件没有关联的文件描述符(套接字),则等于 **null**。

priority

用于实现缓冲事件的事件的优先级。

input

底层输入缓冲区对象(EventBuffer

output

底层输出缓冲区对象(EventBuffer

预定义常量

EventBufferEvent::READING

在缓冲事件的读取操作期间发生事件。请参阅其他标志,以了解它是哪个事件。

EventBufferEvent::WRITING

在缓冲事件的写入操作期间发生事件。请参阅其他标志,以了解它是哪个事件。

EventBufferEvent::EOF

在缓冲事件上收到文件结束指示。

EventBufferEvent::ERROR

缓冲事件操作期间发生错误。有关错误是什么的更多信息,请调用 EventUtil::getLastSocketErrno() 和/或 EventUtil::getLastSocketError()

EventBufferEvent::TIMEOUT

EventBufferEvent::CONNECTED

在缓冲事件上完成请求的连接。

EventBufferEvent::OPT_CLOSE_ON_FREE

释放缓冲事件时,关闭底层传输。这将关闭底层套接字,释放底层缓冲事件等。

EventBufferEvent::OPT_THREADSAFE

自动为缓冲事件分配锁,以便可以从多个线程安全地使用它。

EventBufferEvent::OPT_DEFER_CALLBACKS

设置此标志时,缓冲事件将延迟其所有回调。请参阅 » 使用 Libevent 进行快速可移植的非阻塞网络编程,延迟回调

EventBufferEvent::OPT_UNLOCK_CALLBACKS

默认情况下,当缓冲事件被设置为线程安全时,在调用任何用户提供的回调时都会保持缓冲事件的锁。设置此选项会使 Libevent 在调用回调时释放缓冲事件的锁。

EventBufferEvent::SSL_OPEN

SSL 握手完成

EventBufferEvent::SSL_CONNECTING

SSL 当前正在作为客户端执行协商

EventBufferEvent::SSL_ACCEPTING

SSL 当前正在作为服务器执行协商

目录

添加注释

用户贡献的笔记

此页面没有用户贡献的笔记。
To Top