swoole_event_add

将一个socket加入到底层的reactor事件监听中。此函数可以用在ServerClient模式下。

函数原型

bool swoole_event_add(mixed $sock, mixed $read_callback, mixed $write_callback = null, 
		int $flags = null);

参数

参数1$sock 可以为以下四种类型:

参数2$read_callback为可读事件回调函数,参数3$write_callback为可写事件回调函数,此参数可以是字符串函数名、对象+方法、类静态方法或匿名函数,当此socket可读或者可写时回调指定的函数。

参数4$flags为事件类型的掩码,可选择关闭/开启可读可写事件,如SWOOLE_EVENT_READSWOOLE_EVENT_WRITE,或者SWOOLE_EVENT_READ | SWOOLE_EVENT_WRITE

在 Server 程序中使用时,必须在 Worker 进程启动后使用。在 Server::start 之前不得调用任何异步 IO 接口

返回值

使用swoole_event_addsocket加入到事件监听后,底层会自动将该socket设置为非阻塞模式

使用实例

$fp = stream_socket_client("tcp://www.qq.com:80", $errno, $errstr, 30);
fwrite($fp,"GET / HTTP/1.1\r\nHost: www.qq.com\r\n\r\n");

swoole_event_add($fp, function($fp) {
	$resp = fread($fp, 8192);
 	//socket处理完成后,从epoll事件中移除socket
	swoole_event_del($fp);
	fclose($fp);
});
echo "Finish\n";  //swoole_event_add不会阻塞进程,这行代码会顺序执行

回调函数