函数名称: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扩展。