在包含使用stream_select()
创建的服务器套接字的数组上使用stream_socket_server()
以及客户端套接字时,它会立即返回并选择服务器套接字。
我对stream_select()
的理解是它只应在服务器套接字状态发生变化(或达到超时)时返回。只有在新客户端尝试连接或一个客户端已发送数据时才会发生这种情况。
我写了以下代码:
$socket = stream_socket_server("tcp://localhost:8888");
$connections['master'] = $socket;
while(true) {
$w = $e = null;
$r = $connections;
if (stream_select($r, $w, $e, 1) !== false) {
foreach ($r as $socket) {
if ($socket === $connections['master']) {
$conn = stream_socket_accept($socket);
$connections[] = $conn;
} else {
// Handle communication with client...
}
}
}
}
有了这个,我得到一个不间断的运行循环,其中$r
每次包含服务器套接字,但stream_socket_accept()
抛出错误,因为没有客户端尝试连接。
我做错了什么?或者我对stream_select()
错误的理解是什么?