我现在正在研究一个 php websockets 服务器实现来编写一个新的。
这是接受新连接的部分:
$write = [];
$except = [];
while(isset(self::$read[0])){
$changed = self::$read;
$result = socket_select($changed, $write, $except, 1);
if($result === false){
// Error handling
}elseif($result > 0){
foreach($changed as $clientID => $socket){
if($clientID != 0){
// Read bytes
}else{
$client = socket_accept(self::$read[0]);
if($client !== false){
// Add client
}
}
}
}
// Ping idle clients
}
self::$read[0]
监听新连接的主套接字在哪里。
我还没有(目前也无法)彻底测试这个,但是如果在那一秒钟内有多个传入的新连接,那么socket_accept
唯一的连接不会接受其中一个吗?是否会socket_select
在下一次迭代中再次选择主套接字,因为仍有连接被接受?