Nom de la fonction: Stream_Select ()
Version applicable: PHP 4> = 4.3.0, PHP 5, PHP 7
Description de la fonction: La fonction Stream_Select () est utilisée pour attendre dans un ensemble donné de flux de fichiers jusqu'à ce qu'un ou plusieurs des flux de fichiers aient des événements lisibles, écrivatifs ou exceptionnels. Il s'agit d'une fonction très courante dans la programmation réseau et peut être utilisée pour créer des multiplexeurs d'E / S efficaces.
Syntaxe: int stream_select (Array & $ read, array & $ write, array & $ sauf, int $ tv_sec [, int $ tv_usec = 0])
paramètre:
Valeur de retour: le nombre de flux qui se produisent avant le délai d'expiration ou return faux en cas d'erreur.
Exemple:
$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 { // 超时或出错处理}
Dans l'exemple ci-dessus, nous créons trois connexions TCP et les mettons dans le tableau $read
. Ensuite, nous appelons stream_select()
pour attendre que tous les événements lisibles se produisent sur ces connexions, avec un temps d'attente de 5 secondes. Si un événement lisible se produit dans le délai d'attente, nous utilisons fread()
pour lire les données et les traiter. Si un délai d'expiration ou une erreur se produit, nous pouvons le gérer en conséquence au besoin.
Notez que stream_select()
bloque, c'est-à-dire que le script en pause pendant l'attente jusqu'à ce que l'événement se produise ou le délai d'attente. Par conséquent, il doit généralement être utilisé en conjonction avec des flux de mode non bloquant pour utiliser pleinement ses avantages.