Maison  >  Article  >  cadre php  >  Comment utiliser Swoole pour implémenter l'interaction serveur et client WebSocket

Comment utiliser Swoole pour implémenter l'interaction serveur et client WebSocket

王林
王林original
2023-11-07 14:15:24910parcourir

Comment utiliser Swoole pour implémenter linteraction serveur et client WebSocket

WebSocket est devenu un protocole de communication en temps réel couramment utilisé dans les applications Web modernes. Le développement d'un serveur WebSocket à l'aide de PHP nécessite généralement l'utilisation d'extensions telles que Swoole, car il prend en charge la programmation asynchrone, la gestion des processus, le mappage de la mémoire et d'autres fonctionnalités liées à WebSocket. Dans cet article, nous expliquerons comment utiliser Swoole pour implémenter l'interaction serveur-client WebSocket et fournirons quelques exemples de code spécifiques.

Swoole et WebSocket

Swoole est une excellente extension PHP qui offre un très bon support pour implémenter des serveurs WebSocket. Swoole prend en charge la programmation asynchrone et l'accès simultané multi-processus et multi-thread. Il gère le cycle de vie du serveur et fournit d'autres fonctionnalités utiles telles que le mappage de la mémoire. WebSocket est un protocole de communication en temps réel couramment utilisé dans les applications Web modernes. L'utilisation de Swoole pour développer un serveur WebSocket nous permet de mettre en œuvre facilement une communication en temps réel avec les clients.

Étape 1 : Préparation de l'environnement du projet

Vous devez d'abord installer l'extension Swoole, qui peut être installée via la commande suivante :

pecl install swoole

Après l'installation, vous devez ajouter la configuration suivante au fichier php.ini :

extension=swoole

Après avoir effectué les opérations ci-dessus, vous pouvez l'utiliser en PHP Extended en utilisant Swoole.

Ensuite, vous devez créer un client WebSocket localement. Vous pouvez utiliser certains outils réseau ou installer un plug-in de navigateur Chrome "Simple WebSocket Client".

Étape 2 : Démarrez le serveur WebSocket

Dans ce processus, vous devez créer une instance de serveur Swoole WebSocket et effectuer certaines configurations de base, telles que la définition du port d'écoute et de l'adresse IP du serveur WebSocket. Vous devez également gérer diverses configurations. événements et événements des données du serveur WebSocket. Voici un exemple simple :

$server = new SwooleWebsocketServer("0.0.0.0", 9501);

$server->on('open', function (SwooleWebSocketServer $server, $request) {
    echo "connection open: {$request->fd}
";
});

$server->on('message', function (SwooleWebSocketServer $server, $frame) {
    echo "received message: {$frame->data}
";
    $server->push($frame->fd, json_encode(["hello", "world"]));
});

$server->on('close', function (SwooleWebSocketServer $server, $fd) {
    echo "connection close: {$fd}
";
});

$server->start();

Dans le code ci-dessus, une instance de serveur WebSocket est créée à l'aide du nouveau mot-clé. Son constructeur doit transmettre une adresse IP et un numéro de port, et Swoole écoutera les connexions WebSocket sur ce port. Ensuite, les événements d'ouverture, de message et de fermeture du serveur WebSocket sont traités via plusieurs fonctions de rappel. Enfin, appelez la méthode $server->start() pour démarrer le serveur WebSocket.

Après avoir créé une instance de serveur WebSocket, vous pouvez gérer tous les événements utilisateur en reliant le rappel d'événement. Par exemple, nous pouvons gérer l'événement open d'une connexion client WebSocket au serveur en reliant la fonction de rappel 'open'.

Étape 3 : Interaction des données

Deux façons pour le client et le serveur WebSocket d'interagir : le serveur peut transmettre des données au client, et le client peut également envoyer des données au serveur WebSocket.

Le serveur envoie des données au client

Le serveur peut utiliser la méthode $server->push() pour transmettre des données à un client spécifique ou à tous les clients. Voici un exemple simple :

$server->push($frame->fd, json_encode(["hello", "world"]));

Dans le code ci-dessus, $frame->fd est l'identifiant unique du client. Une connexion WebSocket peut être considérée comme une connexion TCP ouverte sur le serveur, où le client est identifié par un identifiant unique ($frame->fd).

Le client envoie des données au serveur

Le client peut utiliser l'API WebSocket écrite en JavaScript pour envoyer des données au serveur. Ce qui suit est un simple extrait de code JavaScript qui montre comment envoyer des données à un serveur WebSocket.

const socket = new WebSocket('ws://localhost:9501');
socket.addEventListener('open', function (event) {
    socket.send('Hello World!'); // 发送数据
});

La communication entre le client et le serveur est basée sur les événements, les données reçues doivent donc être traitées via des gestionnaires d'événements. Une fonction de rappel doit être liée à l'événement WebSocket 'message', qui sera responsable du traitement des données reçues. Ce qui suit est un exemple simple :

$server->on('message', function (SwooleWebSocketServer $server, $frame) {
    echo "received message: {$frame->data}
";
});

Exemple de code complet

Ce qui suit est un exemple complet de serveur Swoole WebSocket, démontrant comment utiliser Swoole pour établir un serveur WebSocket et interagir avec les clients.

Ce serveur WebSocket écoutera et gérera les connexions WebSocket sur le port 9501. Vous pouvez utiliser n'importe quel client WebSocket pour tester et explorer cette instance de serveur.

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!

Déclaration:
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