Position actuelle: Accueil> Catégories de fonctions> socket_select

socket_select

Exécutez l'appel système SELECT () sur le tableau de socket de délai d'expiration spécifié
Nom:socket_select
Catégorie:Prises
Langage de programmation:php
Description en une ligne:Multiplexage du blocage des opérations d'E / S sur un ensemble donné de prises

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:

  • $ Read: Une gamme de prises qui doivent surveiller les événements de lecture.
  • $ write: un tableau contenant des prises qui doivent surveiller les événements d'écriture.
  • $ sauf: une gamme de prises qui doivent surveiller les événements d'exception.
  • $ tv_sec: temps de temps mort en secondes. Si 0, cela signifie une attente infinie.
  • $ TV_USEC: La partie microseconde de l'heure du délai d'attente. La valeur par défaut est 0.

Valeur de retour:

  • Si au moins une prise est prête à lire, à écrire ou a une exception, la valeur de retour est supérieure à 0.
  • Si le délai d'expiration atteint, la valeur de retour est 0.
  • Si une erreur se produit, la valeur de retour est -1.

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.

Fonctions similaires
Articles populaires