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

socket_select

指定されたタイムアウトソケットアレイでselect()システムコールを実行します
名前:socket_select
カテゴリ:ソケット
対応言語:php
一言説明:特定のソケットセットでI/O操作をブロックする多重化

関数名:socket_select()

適用バージョン:PHP 4> = 4.3.0、PHP 5、PHP 7

関数の説明:Socket_Select()関数は、特定のソケットセットでI/O操作をマルチプレックスブロックするために使用されます。複数のソケットを同時に監視して、どのソケットが入力、出力、または例外イベントが発生しているかを判断できます。この関数は、オペレーティングシステムが提供する選択システム呼び出しに基づいて実装されます。

構文:int socket_select(array&$ read、array&$ write、array&$を除き、int $ tv_sec [、int $ tv_usec = 0])

パラメーター:

  • $ read:読み取りイベントを監視する必要があるソケットの配列。
  • $ write:書き込みイベントを監視する必要があるソケットを含む配列。
  • $を除く:例外イベントを監視する必要があるソケットの配列。
  • $ TV_SEC:数秒単位のタイムアウト時間。 0の場合、それは無限の待機を意味します。
  • $ TV_USEC:タイムアウト時間のマイクロ秒部分。デフォルト値は0です。

返品値:

  • 少なくとも1つのソケットが読み取り、書き込みの準備ができている場合、または例外がある場合、返品値は0より大きくなります。
  • タイムアウト時間に達した場合、返品値は0です。
  • エラーが発生した場合、返品値は-1です。

例:

 $serverSocket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_bind($serverSocket, '127.0.0.1', 8888); socket_listen($serverSocket); $clientSockets = array($serverSocket); $write = $except = array(); while (true) { $read = $clientSockets; // 用于监视读事件的socket数组// 使用socket_select()等待事件发生if (socket_select($read, $write, $except, 0) < 1) { continue; } // 检查是否有新的客户端连接if (in_array($serverSocket, $read)) { $clientSocket = socket_accept($serverSocket); $clientSockets[] = $clientSocket; echo "New client connected." . PHP_EOL; // 从读事件数组中移除服务器socket $key = array_search($serverSocket, $read); unset($read[$key]); } // 处理已连接的客户端发送的数据foreach ($read as $clientSocket) { $data = socket_read($clientSocket, 1024); if ($data === false) { // 客户端断开连接$key = array_search($clientSocket, $clientSockets); unset($clientSockets[$key]); socket_close($clientSocket); echo "Client disconnected." . PHP_EOL; } else { // 处理客户端发送的数据echo "Received data: " . $data . PHP_EOL; } } } // 关闭服务器socket socket_close($serverSocket);

上記の例は、Socket_Select()関数を使用して多重化を実装する単純なTCPサーバーを示しています。ループでは、Socket_Select()を介してイベントが発生するのを待ち、次に、新しいクライアント接続、クライアントの切断、クライアントが送信したデータの受信など、返品結果に応じてさまざまな状況を処理します。この方法では、単一のスレッドで複数のクライアント接続を同時に処理することができ、サーバーのパフォーマンスと同時処理機能が向上します。

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