查詢

EventBufferEvent::sslSocket()函式—用法及示例

「 為一個EventBufferEvent物件設定一個SSL/TLS握手的網路連線 」


函式名稱:EventBufferEvent::sslSocket()

適用版本:Event擴充套件版本2.0.0以上

說明:EventBufferEvent::sslSocket() 方法用於為一個EventBufferEvent物件設定一個SSL/TLS握手的網路連線。此方法將配置底層socket以支援SSL/TLS協議,並進行握手操作。

用法: EventBufferEvent::sslSocket(resource $socket, EventBase $base, mixed $ctx, int $state = EventBufferEvent::SSL_OPEN)) 引數:

  • $socket:一個套接字資源,它應該已經配置為非阻塞模式。可以使用fsockopen()、stream_socket_client()或socket_create()等函式建立。
  • $base:一個EventBase物件,它將用於處理事件。
  • $ctx:配置上下文。可以使用openssl_*相關函式建立並配置。
  • $state:可選引數,指定相關套接字的初始SSL握手狀態,預設為EventBufferEvent::SSL_OPEN。

示例程式碼:

$base = new EventBase();
$socket = stream_socket_client('tcp://www.example.com:443', $errno, $errstr, 30);
if (!$socket) {
    echo "連線失敗:$errstr ($errno)";
    return;
}

$event = new EventBufferEvent($base, $socket, EventBufferEvent::OPT_CLOSE_ON_FREE | EventBufferEvent::OPT_DEFER_CALLBACKS);

$sslCtx = openssl_context_create(TLS_client_method());
$event->sslSocket($socket, $base, $sslCtx);

$event->setCallbacks(
    null, // 讀回撥
    null, // 寫回撥
    null, // 錯誤回撥
    function ($event) {
        // SSL握手完成
        echo "握手成功!";
    }
);

$event->enable(Event::READ);
$base->loop();

以上示例程式碼首先建立了一個EventBase物件,然後透過stream_socket_client()函式建立了一個與www.example.com的443埠的TCP連線。然後用EventBufferEvent類建立一個EventBufferEvent物件,並設定了一些選項。接下來,使用openssl_context_create()函式建立了一個SSL上下文物件$sslCtx,並將其傳入sslSocket()方法中以進行SSL握手配置。然後設定了一些事件回撥函式,最後透過enable()方法和EventBase::loop()方法使事件迴圈執行。

請注意,使用此函式需要在系統中安裝Event擴充套件,並啟用OpenSSL擴充套件。

補充糾錯
熱門PHP函式
分享連結