Funktionsname: Stream_Select ()
Anwendbare Version: Php 4> = 4.3.0, Php 5, Php 7
Funktionsbeschreibung: Die Funktion stream_select () wird verwendet, um in einem bestimmten Satz von Dateiströmen zu warten, bis ein oder mehrere der Dateiströme lesbar, beschreibbar oder außergewöhnliche Ereignisse haben. Es ist eine sehr häufige Funktion bei der Netzwerkprogrammierung und kann verwendet werden, um effiziente E/A -Multiplexer zu erstellen.
Syntax: int stream_select (Array & $ Read, Array & $ Write, Array & $ außer, int $ tv_sec [, int $ tv_usec = 0])
Parameter:
Rückgabewert: Die Anzahl der Streams, die vor der Zeitüberschreitung auftreten, oder bei einem Fehler FALSE zurückgeben.
Beispiel:
$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 { // 超时或出错处理}
Im obigen Beispiel erstellen wir drei TCP -Verbindungen und setzen sie in das $read
-Array ein. Anschließend nennen wir stream_select()
, um auf lesbare Ereignisse in diesen Verbindungen mit einer Wartezeit von 5 Sekunden zu warten. Wenn innerhalb der Zeitüberschreitungszeit ein lesbares Ereignis erfolgt, verwenden wir fread()
-Funktion, um die Daten zu lesen und zu verarbeiten. Wenn ein Timeout oder ein Fehler auftritt, können wir es bei Bedarf entsprechend verarbeiten.
Beachten Sie, dass stream_select()
blockiert, d. H. Das Skript wird die Ausführung während des Wartens pausieren, bis das Ereignis stattfindet oder eine Auszeit. Daher muss es normalerweise in Verbindung mit nicht blockierenden Modusströmen verwendet werden, um seine Vorteile vollständig zu nutzen.