Rob*_*cks 20 php sockets scripting webserver asynchronous
典型的PHP套接字功能是同步的,并在等待传入连接和数据时停止线程.(例如.socket_read和socket_listen)
我如何异步地做同样的事情?所以我可以响应数据接收事件中的数据,而不是轮询数据等.
cha*_*aos 18
是的,这socket_set_nonblock()就是为了什么.考虑到错误代码11 EWOULDBLOCK,和115所EINPROGRESS假设的特殊含义,您的套接字交互代码需要以不同方式编写.
这是来自PHP同步套接字轮询循环的一些有些虚构的示例代码,如下所示:
$buf = '';
$done = false;
do {
$chunk = socket_read($sock, 4096);
if($chunk === false) {
$error = socket_last_error($sock);
if($error != 11 && $error != 115) {
my_error_handler(socket_strerror($error), $error);
$done = true;
}
break;
} elseif($chunk == '') {
$done = true;
break;
} else {
$buf .= $chunk;
}
} while(true);
Run Code Online (Sandbox Code Playgroud)