現在の位置: ホーム> 関数カテゴリ一覧> stream_select

stream_select

特定のストリーム配列でSelect()システムコールを実行し、tv_secおよびtv_usecで指定されたタイムアウトを使用します
名前:stream_select
カテゴリ:ストリーム
対応言語:php
一言説明:1つ以上のファイルストリームが読み取り可能な、書き込み可能な、または例外的なイベントがあるまで、特定のファイルストリームのセットで待ちます

関数名: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])

パラメーター:

  • $ read:チェックする読み取り可能なストリームを含む配列。
  • $ write:チェックする書き込み可能なストリームを含む配列。
  • $を除く:チェックする例外ストリームを含む配列。
  • $ TV_SEC:待機する秒数を設定します。
  • $ TV_USEC:待機時間のマイクロ秒数を設定します。

返品値:タイムアウト前に発生するストリームの数、またはエラーの場合に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()関数がブロックされていることに注意してください。つまり、スクリプトは、イベントが発生するかタイムアウトまで待機中に実行を一時停止します。したがって、通常、非ブロッキングモードストリームと組み合わせて使用​​して、その利点を完全に活用する必要があります。

類似の関数
人気記事(にんききじ)