Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数千次的等待,尽管如此徘徊,关闭等_Php_Sockets - Fatal编程技术网

Php 数千次的等待,尽管如此徘徊,关闭等

Php 数千次的等待,尽管如此徘徊,关闭等,php,sockets,Php,Sockets,我在一个网站上工作,一次可以连接到多个URL(我们希望达到每分钟约600个),无论我做什么尝试,总有数千个时间等待打开。我知道这些对TCP连接至关重要,但它们正在使用所有可用的端口。PHP没有SO_REUSEPORT,SO_ReuseAdr不能与远程连接一起工作。以下是代码的开头: $s = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_set_option($s, SOL_SOCKET, SO_LINGER,array('l_ling

我在一个网站上工作,一次可以连接到多个URL(我们希望达到每分钟约600个),无论我做什么尝试,总有数千个时间等待打开。我知道这些对TCP连接至关重要,但它们正在使用所有可用的端口。PHP没有SO_REUSEPORT,SO_ReuseAdr不能与远程连接一起工作。以下是代码的开头:

$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。每个循环调用套接字_select,超时为0

有人有什么建议吗?我想提高速度,同时减少netstat中出现的等待时间

谢谢,
James Hartig

如果您想减少Linux上的
等待时间
,您可以修改
proc
设置:

echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout

这会将超时更改为30秒。请注意,
TIME\u WAIT
是标准TCP/IP行为的一部分-除非您真的急需资源,否则我不会做这么多。

您可以发送HTTP头
连接:关闭
以及您的请求,这将导致服务器在向您发送请求后发送TCP FIN。因为另一方发送了第一个FIN,所以等待时间的将是另一方,而不是你