Maison >développement back-end >tutoriel php >Comment combiner PHP avec WebSocket pour parvenir à une communication en temps réel ?

Comment combiner PHP avec WebSocket pour parvenir à une communication en temps réel ?

王林
王林original
2023-08-19 09:43:441062parcourir

Comment combiner PHP avec WebSocket pour parvenir à une communication en temps réel ?

Comment combiner PHP avec WebSocket pour parvenir à une communication en temps réel ?

Avec le développement rapide d'Internet, la communication en temps réel devient de plus en plus importante dans de nombreuses applications. WebSocket est un protocole de communication en temps réel qui établit une connexion persistante basée sur TCP, permettant une communication bidirectionnelle entre le serveur et le client.

Dans cet article, nous verrons comment utiliser PHP combiné avec WebSocket pour réaliser une communication en temps réel. Tout d’abord, nous devons nous assurer que PHP est installé et qu’un serveur compatible WebSocket.

Étape 1 : Paramètres côté serveur

Afin d'implémenter la communication WebSocket, nous devons l'activer côté serveur. Ceci peut être réalisé en utilisant la bibliothèque Ratchet de PHP. Tout d'abord, installez la bibliothèque Ratchet via Composer :

composer require cboden/ratchet

Une fois l'installation terminée, nous pouvons créer un fichier serveur WebSocket websocket.php et y ajouter le code suivant :

require 'vendor/autoload.php';

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

class WebSocketServer 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 onClose(ConnectionInterface $conn)
    {
        $this->clients->detach($conn);
        echo "Connection closed: {$conn->resourceId}
";
    }

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

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

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

$server->run();

Dans le code ci-dessus, nous avons créé une classe appelée WebSocketServer. , implémente l'interface MessageComponentInterface de Ratchet. Dans cette classe, nous définissons onOpen, onClose, onError, onMessage et d'autres méthodes pour gérer l'ouverture, la fermeture, les erreurs et l'envoi de messages des connexions WebSocket.

Créez une instance de serveur WebSocket via la méthode IoServer::factory() et spécifiez l'utilisation des classes HttpServer, WsServer et WebSocketServer. Enfin, le serveur fonctionne sur le port 8080.

Étape 2 : Configuration du client

Côté client, nous pouvons utiliser JavaScript pour communiquer avec le serveur WebSocket de PHP. Voici un exemple de fichier client index.html :

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

    <script>
        var conn = new WebSocket('ws://localhost:8080');

        conn.onopen = function() {
            console.log('Connected to the server');
        };

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

        conn.onerror = function(error) {
            console.log('Error occurred: ' + error);
        };

        conn.onmessage = function(msg) {
            $('#messageList').append('<li>' + msg.data + '</li>');
        };

        $('#sendButton').click(function() {
            var message = $('#messageInput').val();
            conn.send(message);
        });
    </script>
</body>
</html>

Dans le code ci-dessus, nous utilisons l'objet WebSocket de JavaScript pour créer une connexion au serveur. Les fonctions de rappel correspondantes sont exécutées lorsque la connexion est ouverte, fermée, lorsqu'une erreur se produit et lorsqu'un message est reçu.

Dans la page, nous avons ajouté une zone de texte et un bouton pour saisir et envoyer des messages. Lorsqu'un message est reçu, le message est ajouté à une liste non ordonnée.

Étape 3 : Exécutez le code

Entrez le répertoire où se trouve le fichier du serveur sur la ligne de commande, et exécutez la commande suivante pour démarrer le serveur :

php websocket.php

Ensuite, ouvrez le fichier index.html dans le navigateur, et nous pouvons commencer la communication en temps réel. Entrez un message dans la zone de saisie et cliquez sur le bouton Envoyer, le message sera envoyé au serveur via WebSocket et transmis par le serveur à tous les clients connectés.

Résumé

En utilisant PHP combiné à WebSocket, nous pouvons réaliser des fonctions de communication en temps réel simples et puissantes. L'exemple de code présenté dans cet article montre comment configurer le serveur et le client pour une communication de base en temps réel. En fonction des besoins réels, nous pouvons étendre et améliorer davantage ces codes et implémenter des fonctions plus complexes.

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