stream_select
特定のストリーム配列でSelect()システムコールを実行し、tv_secおよびtv_usecで指定されたタイムアウトを使用します
関数名:stream_select()
適用バージョン:PHP 4> = 4.3.0、PHP 5、PHP 7
関数の説明:Stream_Select()関数は、1つ以上のファイルストリームが読み取り可能な、書き込み可能な、または例外的なイベントを持つまで、特定のファイルストリームのセットで待機するために使用されます。これは、ネットワークプログラミングで非常に一般的な機能であり、効率的なI/Oマルチプレクサを作成するために使用できます。
構文:int stream_select(array&$ read、array&$ write、array&$を除き、int $ tv_sec [、int $ tv_usec = 0])
パラメーター:
返品値:タイムアウト前に発生するストリームの数、またはエラーの場合にfalseを返すストリームの数。
例:
$socket1 = stream_socket_client("tcp://www.example.com:80", $errno, $errstr, 30); $socket2 = stream_socket_client("tcp://www.example.net:80", $errno, $errstr, 30); $socket3 = stream_socket_client("tcp://www.example.org:80", $errno, $errstr, 30); $read = array($socket1, $socket2, $socket3); $write = $except = null; if (stream_select($read, $write, $except, 5)) { foreach ($read as $socket) { $data = fread($socket, 1024); // 对读取到的数据进行处理} } else { // 超时或出错处理}
上記の例では、3つのTCP接続を作成し、 $read
配列に入れます。次に、 stream_select()
関数を呼び出して、5秒の待機時間でこれらの接続で読み取り可能なイベントが発生するのを待ちます。読み取り可能なイベントがタイムアウト時間内に発生した場合、 fread()
関数を使用してデータを読み取り、処理します。タイムアウトまたはエラーが発生した場合、必要に応じてそれに応じて処理できます。
stream_select()
関数がブロックされていることに注意してください。つまり、スクリプトは、イベントが発生するかタイムアウトまで待機中に実行を一時停止します。したがって、通常、非ブロッキングモードストリームと組み合わせて使用して、その利点を完全に活用する必要があります。