Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.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 流\u套接字\u客户端在5秒内冻结_Php_Sockets - Fatal编程技术网

Php 流\u套接字\u客户端在5秒内冻结

Php 流\u套接字\u客户端在5秒内冻结,php,sockets,Php,Sockets,以下是我代码的一部分: while(true) { $socket_options = array( 'socket' => array( 'bindto' => 'X.X.X.X:0' ) ); $context = stream_context_create($socket_options); $fp = stream_socket_client('tcp://mywebsite.com:80'

以下是我代码的一部分:

while(true)
{
    $socket_options = array(
        'socket' => array(
            'bindto' => 'X.X.X.X:0'
       )
    );
    $context = stream_context_create($socket_options);
    $fp = stream_socket_client('tcp://mywebsite.com:80', $errno, $errstr, 1, STREAM_CLIENT_CONNECT, $context);
    fclose($fp);
}
似乎一切都运行正常,除了一些时间或do
$fp=stream\u socket\u client(…)
大约需要5秒钟。通常需要大约0.05秒

如您所见,我添加了一个1秒的超时,该超时被忽略。在这5秒钟之后,一切似乎都运转良好

使用tcpdump,我试着看看会发生什么:例如,在18:00:00,我们运行函数
$fp=stream\u socket\u client(…)
。我们在tcpdebug中没有错误也没有跟踪。18:00:05,此函数解冻,因此我们在tcpdebug中获得了第一条跟踪:

18:00:05.383328 IP4 XXX.39881 > YYY: Flags [S], seq 888461900, win 28800, options [mss 1440,sackOK,TS val 132651022 ecr 0,nop,wscale 7], length 0
18:00:05.385622 IP4 YYY > XXX.39881: Flags [S.], seq 2116836106, ack 888461901, win 14280, options [mss 1440,sackOK,TS val 1826003082 ecr 132651022,nop,wscale 7], length 0
这些人似乎遇到了同样的问题,没有任何解决办法:

编辑

在一些测试之后,
socket\u create
也会出现同样的问题:

$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($sock, 'X.X.X.X');          
socket_connect($sock, 'mywebsite.com', 80);
[...]
socket_close($sock);
以下是一些IP的响应时间:

X.X.X.18 : 5.2102129459381
X.X.X.29 : 5.1817638874054
X.X.X.11 : 5.2263398170471
X.X.X.78 : 5.2547619342804
X.X.X.56 : 5.1963429450989
X.X.X.24 : 5.1876528263092

它并没有忽略您的1秒超时,这段时间并没有花在尝试连接上。您看到的延迟来自DNS查找,这是必需的,因为您正在传递主机名而不是IP地址


这不是一个快速的活动。你不想这么做。使用IP地址。

while循环的目的是什么
while(true){
?我正在不断更新服务器mywebsite.com上的一些信息。这是一个宾果:延迟发生在
套接字连接期间。
直接使用IP地址时,一切都正常运行!