gpt4 book ai didi

php - 数以千计的 TIME_WAIT 尽管有 SO_LINGER、关机等

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:37:14 25 4
gpt4 key购买 nike

我在一个同时连接到许多 URL 的网站上工作(我们希望达到每分钟约 600 个),无论我尝试什么,总是有数千个 TIME_WAIT 仍然打开。我知道这些对 TCP 连接至关重要,但它们正在使用所有可用端口。 PHP 没有 SO_REUSEPORT,并且 SO_REUSEADDR 不适用于远程连接。这是代码的开头:

$s = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($s, SOL_SOCKET, SO_LINGER,array('l_linger'=>0, 'l_onoff'=>0)); //I have tried l_onoff=1
socket_set_option($s, SOL_SOCKET, SO_RCVTIMEO,array('sec'=>0,'usec'=>500000));
socket_set_option($s, SOL_SOCKET, SO_SNDTIMEO,array('sec'=>0,'usec'=>500000));
socket_set_option($s, SOL_SOCKET, SO_KEEPALIVE,0);
socket_set_option($s, SOL_SOCKET, SO_REUSEADDR,1);
socket_set_nonblock($s);
socket_bind($s,$ip,0);
socket_connect($s,$host,$port);

$s 进入一个包含所有未决写入的数组,在写入之后我们调用 socket_shutdown($s,1);关闭套接字上的写入。然后在阅读之后我们:

socket_shutdown($s,2); socket_close($s);

所有的读取和写入都是在一个 while 循环中完成的,这个循环最多有 12 个并发连接,如果没有命中,那么它会继续并继续向数组添加另一个 URL。每个循环调用超时为 0 的 socket_select。

有人有什么建议吗?我想提高速度并减少出现在 netstat 中的 TIME_WAIT。

谢谢,詹姆斯·哈蒂格

最佳答案

您可以将 HTTP header Connection: close 与您的请求一起发送,这将导致服务器在向您发送请求后发送 TCP FIN。因为另一方发送了第一个 FIN,所以在 TIME_WAIT 中等待的将是另一方,而不是你。

关于php - 数以千计的 TIME_WAIT 尽管有 SO_LINGER、关机等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2114368/

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