Funktionsname: Socket_Select ()
Anwendbare Version: Php 4> = 4.3.0, Php 5, Php 7
Funktionsbeschreibung: Die Funktion von Socket_Select () wird verwendet, um die Blockierung von E/A -Operationen in einem bestimmten Satz von Sockets zu multiplexen. Es kann mehrere Steckdosen gleichzeitig überwachen, um zu bestimmen, welche Steckdosen Eingaben, Ausgabe oder Ausnahmeereignisse auftreten. Diese Funktion wird basierend auf dem vom Betriebssystem bereitgestellten Systemaufruf implementiert.
Syntax: int socket_select (Array & $ Read, Array & $ Write, Array & $ außer, int $ tv_sec [, int $ tv_usec = 0])
Parameter:
Rückgabewert:
Beispiel:
$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);
Das obige Beispiel demonstriert einen einfachen TCP -Server, der die Funktion von Socket_Select () zum Implementieren von Multiplexing verwendet. Warten Sie in der Schleife, bis das Ereignis über Socket_Select () stattfindet, und behandeln Sie dann unterschiedliche Situationen gemäß dem Rückgabeergebnis, wie z. Diese Methode kann mehrere Client -Verbindungen gleichzeitig in einem einzigen Thread verarbeiten und die Serverleistung und die gleichzeitigen Verarbeitungsfunktionen verbessern.