8

ネットワーク接続を分析するために作成した小さなアプリケーションがあります。ブラウザーから実行され、ローカルの PHP/Apache サーバーに接続します。次に、生のソケットを介して ping パケットを送信するように PHP に要求します。問題は、ping しようとしているホストが動作していないか、ping に応答しない場合、サーバーから応答が得られないことです。

Apache が再起動されるまで、ソケット リクエストは存続します。最近、アプリケーションからさまざまな結果が得られており、ソケットの使用が多すぎる apache のせいにしています。現在、AJAX 呼び出しのタイムアウトを設定しており、満足しています。しかし、到達不能なホストに対して 500,000 のソケットが開かれないように、PHP にタイムアウトを行わせる必要があります。

サンプルコード:

$sockconn = @socket_connect($socket, $target, null);
if(!$sockconn)
{
    $raw['error'] = socket_strerror(socket_last_error());
    $raw['status'] = false;
    return $raw;
}

これはタイムアウトしない機能です。タイムアウトにする必要があります。また、PHP スクリプトの実行時間はソケットに影響しません。

私は無知です。

4

2 に答える 2

14

次のオプションを使用して、読み取りと送信のタイムアウトを設定できます。

socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => 1, 'usec' => 0));
socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array('sec' => 1, 'usec' => 0));

または、ノンブロッキング ソケットを使用し、ソケットを定期的にポーリングして、リモート ホストが応答したかどうかを確認することもできます。

于 2012-08-10T10:47:04.887 に答える
0

default_socket_timeoutを設定してみてください。

于 2012-08-09T10:50:19.310 に答える