经此脚本测试,关闭返回的资源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";
?>
Run Code Online (Sandbox Code Playgroud)
90%的执行时间花在fclose($s);
等效的 C++ 应用程序在尝试关闭侦听套接字时不会遇到如此长的延迟,而是在 < 0.03 秒内关闭。是否有特定于 PHP 的配置会影响此问题?
php.ini好的,
因此,这里发生的情况是,您不仅需要等待应用程序关闭套接字,还需要等待打开的 TCP 套接字在网络层关闭。
当您有一个打开的套接字时,需要来自服务器和对等方的 FIN 才能关闭套接字,或者如果任何一方收到 FIN,则默认超时(大多数为 600 秒,具体取决于设置)。
您可以尝试帮助加快速度的方法是关闭套接字:
stream_socket_shutdown
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1645 次 |
| 最近记录: |