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 固有の構成はありますか?

  • OS: Windows 7 x64 アルティメット
  • PHP: 5.4.0 (クリ)
  • 構成: デフォルトphp.ini
4

1 に答える 1

0

Ok、

したがって、ここで何が起こるかというと、アプリケーションがソケットを閉じるのを待つだけでなく、開いている TCP ソケットがネットワーク層で閉じるのも待つ必要があります。

開いているソケットがある場合、ソケットを閉じるにはサーバーとピアからの FIN が必要です。どちらかの側で FIN を受信した場合は、デフォルトのタイムアウト (セットアップに応じて、ほとんどの場合 600 秒) になります。

これをスピードアップするためにできることは、次の方法でソケットを閉じることです。

stream_socket_shutdown
于 2012-06-06T17:11:28.990 に答える