关闭流服务器套接字很慢

时间:2012-05-30 00:51:25

标签: php sockets

关闭从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 ++应用程序在尝试关闭侦听套接字时不会遇到这段延迟,而是关闭&lt; 0.03秒是否存在影响此问题的特定于PHP的配置?

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

1 个答案:

答案 0 :(得分:0)

好的,

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

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

你可以尝试帮助加快速度的事情是关闭你的套接字:

stream_socket_shutdown