Nom de la fonction: socket_select ()
Version applicable: PHP 4> = 4.3.0, PHP 5, PHP 7
Fonction Description: La fonction socket_select () est utilisée pour multiplexer les opérations d'E / S sur un ensemble donné de sockets. Il peut surveiller plusieurs sockets simultanément pour déterminer quelles prises ont des événements d'entrée, de sortie ou d'exception. Cette fonction est implémentée en fonction de l'appel système sélectionné fourni par le système d'exploitation.
Syntaxe: int socket_select (array & $ lise, array & $ write, array & $ sauf, int $ tv_sec [, int $ tv_usec = 0])
paramètre:
Valeur de retour:
Exemple:
$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);
L'exemple ci-dessus démontre un serveur TCP simple qui utilise la fonction socket_select () pour implémenter le multiplexage. Dans la boucle, attendez que l'événement se produise via socket_select (), puis gérez différentes situations en fonction du résultat de retour, telles que la connexion du nouveau client, la déconnexion du client et la réception des données envoyées par le client. Cette méthode peut gérer plusieurs connexions client simultanément dans un seul thread, améliorant les performances du serveur et les capacités de traitement simultanées.