4

关闭从返回的资源stream_socket_server()非常慢(约 0.5 秒),正如此脚本所测试的:

<?php

echo "Creating socket...";
$s = stream_socket_server("tcp://127.0.0.1:4567");
echo "done\n";

echo "Closing socket...";
fclose($s);
echo "done\n";

?>

90% 的执行时间都花在了fclose($s);

等效的 C++ 应用程序在尝试关闭侦听套接字时不会遇到这种延迟长度,而是在 < 0.03 秒内关闭。是否有影响这一点的特定于 PHP 的配置?

  • 操作系统: Windows 7 x64 Ultimate
  • PHP: 5.4.0 (cli)
  • 配置:默认php.ini
4

1 回答 1

0

好的,

所以,这里发生的事情是,您不仅需要等待应用程序关闭套接字,还需要等待打开的 TCP 套接字在网络层关闭。

当您有一个打开的套接字时,需要来自服务器和对等方的 FIN 才能关闭套接字,或者如果任一方收到 FIN,则默认超时(通常为 600 秒,具体取决于设置)。

您可以尝试帮助加快速度的方法是关闭您的套接字:

stream_socket_shutdown
于 2012-06-06T17:11:28.990 回答