WebSockets en PHP

PHPz
PHPzoriginal
2023-05-29 08:10:351937parcourir

WebSocket est un protocole de communication full-duplex basé sur le protocole TCP. Il implémente une communication bidirectionnelle et peut réaliser une interaction de données en temps réel entre le client et le serveur. Dans les applications Web, grâce à la technologie WebSocket, les utilisateurs peuvent obtenir une expérience plus rapide et en temps réel que le protocole HTTP traditionnel. En langage PHP, l'implémentation de WebSocket est également très pratique.

Il existe deux manières principales d'implémenter WebSocket en PHP : l'une via l'extension swoole et l'autre via la bibliothèque Ratchet.

L'extension Swoole est un cadre de communication réseau open source qui peut implémenter des fonctionnalités asynchrones, coroutine, multi-processus et autres. L'utilisation de l'extension swoole pour implémenter WebSocket peut considérablement améliorer l'efficacité et la stabilité de la communication réseau. Voici un exemple de code qui utilise l'extension swoole pour implémenter WebSocket :

<?php

$server = new SwooleWebsocketServer("127.0.0.1", 9502);

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

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

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

$server->start();

Dans le code ci-dessus, un objet serveur WebSocket est d'abord créé via la classe SwooleWebsocketServer, puis l'établissement de la connexion, la lecture et l'écriture du message sont implémentés dans le message ouvert. et fermer les fonctions de rappel d'événement respectivement. Fermeture de connexion et autres opérations. Il convient de noter que le serveur WebSocket fourni par l'extension swoole est asynchrone et non bloquant, il peut donc prendre en charge les applications de communication réseau à haute concurrence.

Une autre façon d'implémenter WebSocket consiste à utiliser la bibliothèque Ratchet. Ratchet est une bibliothèque d'implémentation de serveur WebSocket implémentée en PHP. Elle possède une variété de fonctions de rappel d'événements intégrées, qui peuvent facilement réaliser l'interaction entre le client et le serveur. Voici un exemple de code qui utilise la bibliothèque Ratchet pour implémenter WebSocket :

<?php

require dirname(__DIR__) . '/vendor/autoload.php';

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

class EchoServer implements MessageComponentInterface {
    protected $clients;

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

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

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

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

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

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

$server->run();

Dans le code ci-dessus, la bibliothèque Ratchet est d'abord introduite, puis une classe EchoServer est définie, qui implémente l'interface MessageComponentInterface, dans laquelle onOpen, onMessage , les fonctions onClose et onError sont traitées respectivement. Il gère les événements tels que l'établissement de la connexion, la lecture et l'écriture des messages, la fermeture de la connexion et la gestion des erreurs. Enfin, l'objet serveur WebSocket est créé et exécuté via la fonction IoServer::factory.

En résumé, que vous utilisiez l'extension swoole ou la bibliothèque Ratchet, il est très pratique d'implémenter WebSocket en PHP. Les développeurs peuvent choisir la solution appropriée en fonction des besoins réels pour mettre en œuvre rapidement et efficacement des fonctions de communication en temps réel dans les applications Web.

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