Aktueller Standort: Startseite> Funktionskategorien> socket_select

socket_select

Führen Sie den Select () -Systemanruf im angegebenen Timeout -Socket -Array aus
Name:socket_select
Kategorie:Steckdosen
Programmiersprache:php
Kurzbeschreibung:Multiplexing von Blockieren von E/A -Operationen auf einem bestimmten Satz von Sockets

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:

  • $ Read: Eine Reihe von Sockets, die Leseereignisse überwachen müssen.
  • $ write: Ein Array mit Steckdosen, die Schreibereignisse überwachen müssen.
  • $ außer: eine Reihe von Steckdosen, die Ausnahmeereignisse überwachen müssen.
  • $ TV_SEC: Zeitüberschreitungszeit in Sekunden. Wenn 0, bedeutet es unendlich warten.
  • $ TV_USEC: Der Mikrosekunde -Teil der Zeitüberschreitungszeit. Der Standardwert ist 0.

Rückgabewert:

  • Wenn mindestens eine Steckdose zum Lesen, Schreiben bereit ist oder eine Ausnahme hat, ist der Rückgabewert größer als 0.
  • Wenn die Zeitüberschreitungszeit erreicht ist, beträgt der Rückgabewert 0.
  • Wenn ein Fehler auftritt, beträgt der Rückgabewert -1.

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.

Ähnliche Funktionen
Beliebte Artikel