私は現在、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]
新しい接続をリッスンするマスター ソケットはどこにありますか。
私はこれを徹底的にテストしていません (そして現在はテストできません) が、その 1 秒以内に複数の着信新しい接続がある場合、そのうちsocket_accept
の 1 つだけを受け入れるのではないでしょうか? socket_select
受け入れる接続がまだあるため、次の反復でマスターソケットを再度選択しますか?