0

サーバーに接続されているクライアントの配列を持つphpサーバーがあります..各クライアントが接続されている時間と、クライアントがタイムアウト時間を過ぎて切断したかどうかを確認する方法はありますか? PHPはソケットが受け入れられた時間をどこかに保存しますか? 私はゴーストクライアントを取り除こうとしています..

ソケットが自分自身を受け入れてループスローする時間を設定できることは知っていますが、似たような socket_get_connection_time() 関数があるかどうかの質問はありますか?

4

1 に答える 1

0

これを処理する 1 つの方法は、Unix ベースのプラットフォームを使用している場合、シグナルを使用することです (Windows では利用できないと思います)。

まず、PHP ビルドに pcntl_* 関数が含まれていることを確認する必要があります。ここのドキュメントを参照してください: http://php.net/manual/en/book.pcntl.php 多くのインストールでは、デフォルトではコンパイルされていません。

次のようにします。

if( !function_exists( "pcntl_signal" ) ) {
    die("pcntl_* functions not available");
}

pcntl_signal( 14, "cleanup", TRUE ); // 14 is the value for the SIGALARM unix signal
pcntl_alarm( XXXX ); // where XXXX is the number of second timeout for doing maintenance

function cleanup()
{
   // do your checks for timed out sockets here.
   // you will need some way to access the data, possibly a global variable pointing to
   // to the list of socket connections.
}
于 2012-05-06T16:06:09.773 に答える