Maison  >  Article  >  développement back-end  >  Comment utiliser WebSocket en PHP ?

Comment utiliser WebSocket en PHP ?

WBOY
WBOYoriginal
2023-05-12 08:27:111499parcourir

À mesure que les applications Web deviennent plus complexes, la communication en temps réel et le transfert de données deviennent de plus en plus courants. C'est là qu'intervient WebSocket. WebSocket est un protocole qui permet aux serveurs et aux clients d'établir des connexions persistantes pour une communication bidirectionnelle pour la communication en temps réel et le transfert de données. Dans cet article, nous verrons comment utiliser WebSocket en PHP.

  1. Introduction au protocole WebSocket

WebSocket est un protocole TCP en duplex intégral qui permet au serveur et au client d'établir une connexion réelle. communication temporelle. Contrairement au modèle requête-réponse HTTP, une connexion WebSocket reste toujours ouverte une fois la connexion établie, de sorte que plusieurs négociations HTTP ne sont pas nécessaires.

WebSocket est un protocole binaire qui prend en charge plusieurs types de données, notamment texte, binaire, JSON, XML, etc. Cela rend WebSocket idéal pour la communication en temps réel et le transfert de données.

  1. Installer la bibliothèque WebSocket

Utiliser WebSocket en PHP nécessite l'utilisation d'une bibliothèque. Dans cet article, nous utiliserons la bibliothèque Ratchet. Pour installer Ratchet, vous pouvez exécuter la commande suivante via Composer :

composer require cboden/ratchet

Une fois l'installation terminée, nous pouvons commencer à écrire du code pour implémenter l'application WebSocket.

  1. Implémentation du service WebSocket

Voici un exemple simple d'implémentation d'un service WebSocket qui recevra les messages du client, et enverra le message à tous les clients connectés :

use RatchetServerIoServer;
use RatchetHttpHttpServer;
use RatchetWebSocketWsServer;
use RatchetMessageComponentInterface;
use RatchetConnectionInterface;

class Chat implements MessageComponentInterface {
    protected $clients;

    public function __construct() {
        $this->clients = new SplObjectStorage;
    }

    public function onOpen(ConnectionInterface $conn) {
        $this->clients->attach($conn);
        echo "New client connected: {$conn->resourceId}
";
    }

    public function onClose(ConnectionInterface $conn) {
        $this->clients->detach($conn);
        echo "Client disconnected: {$conn->resourceId}
";
    }

    public function onMessage(ConnectionInterface $from, $msg) {
        foreach ($this->clients as $client) {
            if ($client !== $from) {
                $client->send($msg);
            }
        }
    }

    public function onError(ConnectionInterface $conn, Exception $e) {
        echo "Error: {$e->getMessage()}
";
        $conn->close();
    }
}

$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new Chat()
        )
    ),
    8080
);

echo "Server started
";
$server->run();

Dans l'exemple ci-dessus, nous avons défini une classe appelée Chat, qui implémente l'interface MessageComponentInterface. Cette classe contient des méthodes spéciales pour gérer les connexions, les déconnexions et les messages des clients.

onOpen(ConnectionInterface $conn) : Cette méthode est appelée lorsque le client se connecte au serveur. Ici, nous ajoutons la connexion à l'objet client.

onClose(ConnectionInterface $conn) : Cette méthode est appelée lorsque le client ferme la connexion. Ici, nous supprimons l'objet client de connexion.

onMessage(ConnectionInterface $from, $msg) : Cette méthode est appelée lorsque le client envoie un message. Ici, nous envoyons des messages à d'autres clients connectés.

onError(ConnectionInterface $conn, Exception $e) : Cette méthode est appelée lorsqu'une erreur se produit. Nous fermons la connexion ici.

Dans l'exemple ci-dessus, nous avons également créé un serveur HTTP via la classe IoServer, écoutant le port 8080, transmettant la requête au serveur WebSocket via HttpServer et transmettant la requête à la classe Chat via WsServer.

  1. Implémentation du client

Pour vous connecter à notre serveur WebSocket, vous devez implémenter un client. Voici un exemple simple pour se connecter à un serveur et lui envoyer des messages :

<!DOCTYPE html>
<html>
<head>
    <title>WebSocket client</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
    <input type="text" id="message" placeholder="Enter your message">
    <button id="send">Send</button>

    <ul id="messages"></ul>

    <script>
        $(function () {
            var socket = new WebSocket('ws://localhost:8080');

            socket.onopen = function() {
                console.log('Connection opened');
            };

            socket.onclose = function() {
                console.log('Connection closed');
            };

            socket.onmessage = function(event) {
                var data = JSON.parse(event.data);
                $('#messages').append($('<li>').text(data.message));
            };

            $('#send').click(function() {
                var message = $('#message').val();
                socket.send(JSON.stringify({message: message}));
            });
        });
    </script>
</body>
</html>

Dans l'exemple ci-dessus, nous créons une nouvelle connexion WebSocket à l'aide de l'objet WebSocket. Lorsqu'une connexion est ouverte ou fermée, les événements onopen et onclose sont déclenchés. Lorsqu'un WebSocket reçoit un message du serveur, l'événement onmessage est déclenché. Nous avons utilisé la bibliothèque jQuery pour écouter l'événement de clic du bouton Envoyer, et lorsque vous cliquez dessus, nous avons envoyé la valeur de la zone de saisie de texte sous forme de message au serveur.

  1. Summary

WebSocket est un protocole puissant qui permet au serveur et au client d'établir une connexion persistante pour une communication bidirectionnelle afin d'obtenir communication en temps réel et transmission de données. Dans cet article, nous avons implémenté un simple serveur WebSocket utilisant la bibliothèque Ratchet. Nous avons également utilisé une simple page HTML pour montrer comment se connecter au serveur et envoyer des messages. Si vous souhaitez créer une application Web interactive en temps réel, WebSocket est un élément absolument indispensable.

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