PHP Conference Japan 2024

EventBufferEvent 類別

(PECL event >= 1.2.6-beta)

簡介

表示 Libevent 的緩衝事件。

應用程式通常除了回應事件之外,還需要執行一些資料緩衝。例如,當我們想要寫入資料時,通常的模式如下所示

  1. 決定要將一些資料寫入連線;將該資料放入緩衝區。

  2. 等待連線變成可寫入狀態

  3. 盡可能寫入更多資料

  4. 記住我們寫入了多少資料,如果還有更多資料要寫入,則等待連線再次變成可寫入狀態。

這種緩衝 I/O 模式相當常見,Libevent 為此提供了一種通用機制。「緩衝事件」由底層傳輸機制(例如 socket)、讀取緩衝區和寫入緩衝區組成。不同於常規事件在底層傳輸機制可供讀寫時才給出回呼,緩衝事件在讀取或寫入足夠的數據時才會調用使用者提供的回呼函式。

類別概要

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_CLOSE_ON_FREE = 1; // 釋放時關閉
const int OPT_THREADSAFE = 2; // 執行緒安全
const int OPT_DEFER_CALLBACKS = 4; // 延遲回呼
const int OPT_UNLOCK_CALLBACKS = 8; // 解鎖回呼
const int SSL_OPEN = 0; // SSL 開啟
const int SSL_CONNECTING = 1; // SSL 連線中
const int SSL_ACCEPTING = 2; // SSL 接受中
/* 屬性 */
public int $fd; // 文件描述符
公開 唯讀 事件緩衝區 $input;
公開 唯讀 事件緩衝區 $output;
/* 方法 */
公開 關閉():
公開 連線( 字串 $addr ): 布林值
公開 連線主機(
     事件DNS基礎 $dns_base,
     字串 $hostname,
     整數 $port,
     整數 $family = EventUtil::AF_UNSPEC
): 布林值
公開 建構式(
     事件基礎 $base,
     混合 $socket = 空值,
     整數 $options = 0,
     可呼叫 $readcb = 空值,
     可呼叫 $writecb = 空值,
     可呼叫 $eventcb = 空值,
     混合 $arg = 空值
)
公開 靜態 建立配對( 事件基礎 $base , 整數 $options = 0 ): 陣列
公開 disable( int $events ): bool
公開 enable( int $events ): bool
公開 free(): void
公開 getEnabled(): 整數
公開 read( 整數 $size ): 字串
公開 setCallbacks(
     可呼叫 $readcb,
     可呼叫 $writecb,
     可呼叫 $eventcb,
     混合 $arg = ?
): void
公開 setPriority( 整數 $priority ): 布林值
公開 setTimeouts( 浮點數 $timeout_read , 浮點數 $timeout_write ): 布林值
公開 setWatermark( 整數 $events , 整數 $lowmark , 整數 $highmark ): void
公開 sslError(): 字串
公開 靜態 sslFilter(
     事件基礎 $base,
     事件緩衝事件 $underlying,
     EventSslContext $ctx,
     int $state,
     整數 $options = 0
): EventBufferEvent
公開 靜態 sslSocket(
     事件基礎 $base,
     混合 $socket,
     EventSslContext $ctx,
     int $state,
     整數 $options = ?
): EventBufferEvent
公開 write( 字串 $data ): 布林
}

屬性

fd

與緩衝區事件關聯的數字檔案描述符。通常代表一個綁定的socket。如果沒有檔案描述符(socket)與緩衝區事件關聯,則等於 null

priority (優先級)

用於實現緩衝區事件的事件的優先級。

input (輸入)

底層輸入緩衝區物件( EventBuffer )

output (輸出)

底層輸出緩衝區物件( EventBuffer )

預定義常數

EventBufferEvent::READING (讀取中)

在 bufferevent 的讀取操作期間發生事件。有關發生的事件,請參閱其他標誌。

EventBufferEvent::WRITING (寫入中)

在 bufferevent 的寫入操作期間發生事件。有關發生的事件,請參閱其他標誌。

EventBufferEvent::EOF (檔案結尾)

在緩衝區事件上收到檔案結尾指示。

EventBufferEvent::ERROR (錯誤)

在 bufferevent 操作期間發生錯誤。有關錯誤的更多資訊,請呼叫 EventUtil::getLastSocketErrno() 和/或 EventUtil::getLastSocketError()

EventBufferEvent::TIMEOUT (逾時)

EventBufferEvent::CONNECTED (已連線)

在 bufferevent 上完成請求的連線。

EventBufferEvent::OPT_CLOSE_ON_FREE (釋放時關閉)

釋放緩衝區事件時,關閉底層傳輸。這將關閉底層 socket,釋放底層緩衝區事件等。

EventBufferEvent::OPT_THREADSAFE (執行緒安全)

自動配置 bufferevent 的鎖,以便從多個線程安全地使用。

EventBufferEvent::OPT_DEFER_CALLBACKS

設定此標誌時,bufferevent 會延遲所有回呼。詳見 » 使用 Libevent 進行快速可移植的非阻塞式網路程式設計,延遲回呼

EventBufferEvent::OPT_UNLOCK_CALLBACKS

預設情況下,當 bufferevent 設定為線程安全時,只要呼叫任何使用者提供的回呼,就會鎖定緩衝事件的鎖。設定此選項會使 Libevent 在呼叫回呼時釋放緩衝事件的鎖。

EventBufferEvent::SSL_OPEN

SSL 握手已完成

EventBufferEvent::SSL_CONNECTING

SSL 目前正以用戶端身分執行協商

EventBufferEvent::SSL_ACCEPTING

SSL 目前正以伺服器身分執行協商

目錄

新增註解

使用者貢獻的註解

此頁面沒有使用者貢獻的註解。
To Top