gpt4 book ai didi

php - 如果尚未接受套接字,则主套接字是否仍可以使用socket_select-?

转载 作者:行者123 更新时间:2023-12-03 12:05:31 25 4
gpt4 key购买 nike

我现在正在研究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会在下一次迭代时再次选择主套接字,因为仍有连接要接受吗?

最佳答案

是的,socket_accept()仅返回一个连接。我们可以循环调用select,如果有更多连接(监听器/服务器fd的读取事件),则select将立即返回。 TCP为尚未接受的连接(也称为挂起的连接)维护一个单独的队列。

关于php - 如果尚未接受套接字,则主套接字是否仍可以使用socket_select-?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18627908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com