Maison > développement back-end > tutoriel php > Comment créer un serveur WebSocket en PHP à l'aide des fonctions `socket_*` ?

Comment créer un serveur WebSocket en PHP à l'aide des fonctions `socket_*` ?

Susan Sarandon
Libérer: 2024-12-28 05:28:10
original
290 Les gens l'ont consulté

How to Build a WebSocket Server in PHP Using `socket_*` Functions?

Comment créer un serveur WebSocket en PHP

WebSocket est une technologie qui permet une communication en duplex intégral entre un client Web et un serveur Web. Cela permet le transfert de données en temps réel, ce qui le rend idéal pour des applications telles que les jeux en ligne, la messagerie instantanée et le streaming de données financières.

Code obsolète

La bibliothèque phpwebsockets mentionnée dans la question est en effet obsolète et ne prend pas en charge le dernier protocole WebSocket. De plus, sa mise à jour peut ne pas fonctionner comme prévu.

Création d'un serveur WebSocket

  1. Création de socket : Créez un socket maître à l'aide de la fonction socket_create().
  2. Socket Binding : liez le socket à une adresse IP et un port spécifiques à l'aide de socket_bind().
  3. Écoute de socket : configurez le socket pour qu'il écoute les connexions entrantes à l'aide de socket_listen().
  4. Acceptation de connexions : utilisez socket_accept( ) pour accepter les connexions entrantes et créer de nouveaux sockets client.

Poignée de main Procédure

  1. Recevoir une demande : recevoir la demande de prise de contact du client à l'aide de socket_recv().
  2. Parsing Headers : analyser la demande de prise de contact pour obtenir les en-têtes requis tels que Sec-WebSocket-Key.
  3. Génération Clé d'acceptation : calculez la clé d'acceptation en fonction de la clé Sec-WebSocket fournie.
  4. Envoi de la réponse : envoyez la réponse de prise de contact au client, y compris la clé d'acceptation calculée.

Traitement des messages

  1. Réception Données : utilisez socket_recv() pour recevoir des messages des clients.
  2. Décodage des données : décodez le message reçu s'il est codé à l'aide du protocole de cadrage WebSocket.
  3. Traitement de la demande : traiter la demande du client et envoyer un réponse.

Interaction client-serveur

  1. Connexion client : côté client, utilisez l'objet WebSocket de JavaScript pour établir une connexion au serveur WebSocket .
  2. Envoi de données : utilisez send() pour envoyer des données du client à le serveur.
  3. Réception de données : configurez des écouteurs d'événements pour l'ouverture, l'erreur et le message afin de gérer les messages reçus du serveur.

Exemple de mise en œuvre

Ce qui suit est un exemple d'extrait de code PHP pour un simple serveur WebSocket :

<?php
$master = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($master, SOL_SOCKET, SO_REUSEADDR, 1);
socket_bind($master, 'localhost', 12345);
socket_listen($master, 20);

$sockets = array($master);
$users = array();
$debug = false;

while (true) {
    $changed = $sockets;
    socket_select($changed, $write = NULL, $except = NULL, NULL);

    foreach ($changed as $socket) {
        if ($socket == $master) {
            $client = socket_accept($master);
            if ($client < 0) {
                console("socket_accept() failed");
                continue;
            } else {
                connect($client);
            }
        } else {
            $bytes = @socket_recv($socket, $buffer, 2048, 0);
            if ($bytes == 0) {
                disconnect($socket);
            } else {
                $user = getuserbysocket($socket);
                if (!$user->handshake) {
                    dohandshake($user, $buffer);
                } else {
                    process($user, $buffer);
                }
            }
        }
    }
}
Copier après la connexion

Ce code skeleton illustre les étapes décrites ci-dessus, notamment la création et l'écoute sur le socket maître, l'acceptation des connexions entrantes, l'exécution de la négociation WebSocket et le traitement des messages client. Le script complet doit être complété par les fonctions restantes décrites précédemment, telles que connect(),connect() et process().

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal