Communication en temps réel via PHP et WebSocket

王林
Libérer: 2023-06-28 11:40:02
original
1224 Les gens l'ont consulté

Avec le développement de la technologie Internet, de plus en plus de sites Web et d'applications commencent à se concentrer sur la réalisation de communications en temps réel. Le protocole WebSocket est considéré comme un moyen efficace d'établir une communication en temps réel. Cet article expliquera comment utiliser PHP et WebSocket pour implémenter des fonctions de communication en temps réel.

Qu'est-ce que WebSocket

WebSocket est un protocole basé sur TCP qui peut établir une connexion persistante entre le navigateur et le serveur pour établir une communication bidirectionnelle en temps réel. Contrairement au protocole HTTP, le protocole WebSocket est un protocole full-duplex. Il ne nécessite pas que le navigateur envoie une requête pour recevoir la réponse du serveur, mais peut communiquer directement dans les deux sens.

Étant donné que WebSocket utilise une méthode de connexion longue, cela peut considérablement améliorer l'efficacité de la transmission des données et réduire la charge sur le serveur. Dans les scénarios de communication en temps réel, WebSocket est devenu une technologie indispensable.

PHP et WebSocket

PHP, en tant que langage côté serveur, possède également certains frameworks qui prennent en charge WebSocket. Parmi les plus connus figurent le framework Rachet, le framework swoole, etc.

Dans cet article, nous utilisons le framework Rachet pour implémenter des fonctions de communication en temps réel. Le framework Rachet est un framework open source pour PHP. Il fournit une implémentation côté serveur de WebSocket et peut prendre en charge une variété de serveurs Web, tels qu'Apache, Nginx, etc.

Étapes de mise en œuvre

1. Installez le framework Rachet

Utilisez Composer pour installer le framework Rachet :

composer require cboden/ratchet
Copier après la connexion

2 . Écrivez du code PHP

Ce qui suit est un code PHP simple qui utilise le framework Rachet pour établir une communication en temps réel :

<?php
use RatchetMessageComponentInterface;
use RatchetConnectionInterface;
use RatchetServerIoServer;
use RatchetHttpHttpServer;
use RatchetWebSocketWsServer;

require 'vendor/autoload.php';

class MyChat 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 MyChat()
        )
    ),
    8080
);

$server->run();
Copier après la connexion

Le code définit une classe nommée MyChat, qui implémente l'interface MessageComponentInterface du framework Ratchet. Il contient les 4 méthodes suivantes :

  • onOpen() est appelée lorsqu'une nouvelle connexion est établie.
  • onOpen() 当有新的连接建立时被调用。
  • onMessage() 当代码接收到消息时被调用。
  • onClose() 当连接被关闭时被调用。
  • onError() 当出现错误时被调用。

其中,onOpen() 方法记录了新连接建立的信息,onMessage() 方法将接收到的消息广播给所有连接的客户端,而onClose() 方法记录连接关闭的信息。

最后,代码通过IoServer::factory()onMessage() Appelé lorsque le code reçoit un message.

onClose() Appelé lorsque la connexion est fermée.

onError() Appelé lorsqu'une erreur se produit.

Parmi eux, la méthode onOpen() enregistre les informations établies par la nouvelle connexion, et la méthode onMessage() diffuse le message reçu à tous les clients connectés, et la méthode onClose() enregistre les informations de fermeture de connexion.

Enfin, le code utilise IoServer::factory() pour créer le serveur et activer la surveillance.

3. Test

Démarrez le serveur en ligne de commande :

php chat-server.php
Copier après la connexion
Ensuite ouvrez plusieurs pages client dans le navigateur, chaque page Tous peuvent envoyer et recevez des messages en temps réel pour obtenir l'effet d'une communication en temps réel. #🎜🎜##🎜🎜#Résumé#🎜🎜##🎜🎜#Cet article présente comment utiliser PHP et le framework Rachet pour implémenter des fonctions de communication en temps réel. En utilisant le protocole WebSocket, une connexion persistante peut être établie entre le navigateur et le serveur et une communication bidirectionnelle en temps réel peut être réalisée. Dans les scénarios de communication en temps réel, l'utilisation du protocole WebSocket est devenue une technologie indispensable, et le framework Rachet nous offre une méthode de mise en œuvre simple et efficace. #🎜🎜#

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!

Étiquettes associées:
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal