Maison  >  Article  >  développement back-end  >  PHP et WebSocket : bonnes pratiques pour le transfert de données en temps réel

PHP et WebSocket : bonnes pratiques pour le transfert de données en temps réel

WBOY
WBOYoriginal
2023-12-17 21:21:33632parcourir

PHP和WebSocket: 实现实时数据传输的最佳实践

Ces dernières années, avec le développement rapide d'Internet, la demande de communication en temps réel est devenue de plus en plus forte, et l'émergence de WebSocket offre une solution plus élégante pour la transmission de données en temps réel. Dans le développement web, le langage PHP occupe également une place parmi les langages back-end grand public. Alors, comment utiliser PHP et WebSocket pour réaliser une transmission de données en temps réel ?

1. Qu'est-ce que WebSocket

WebSocket est un protocole de communication full-duplex qui communique via le port 80 ou 443 du protocole HTTP/HTTPS. Lorsque WebSocket établit une connexion, le client et le serveur peuvent s'envoyer des messages sans avoir besoin d'un mode « requête-réponse ». Par conséquent, il présente les avantages d'une forte performance en temps réel, d'une communication bidirectionnelle et d'une faible. surcharge et convient au chat en temps réel, aux jeux en ligne et à d'autres scénarios nécessitant une interaction rapide.

2. Utilisation de WebSocket en PHP

Les frameworks PHP couramment utilisés dans le développement Web incluent Laravel, CodeIgniter, etc. Ce qui suit prendra Laravel comme exemple pour présenter comment utiliser PHP et WebSocket pour réaliser une transmission de données en temps réel.

  1. Install Ratchet

Ratchet est une bibliothèque WebSocket pour PHP qui peut être utilisée pour implémenter le serveur WebSocket. Dans le projet Laravel, il peut être installé via composer. La commande est la suivante :

$ composer require cboden/ratchet
  1. Créez un contrôleur WebSocket

Créez un contrôleur WebSocket dans le répertoire app/Http/Controllers du projet Laravel et nommez-le ChatController. Ce contrôleur hérite de l'interface MessageComponentInterface de Ratchet et réécrit les méthodes onOpen, onMessage, onClose et onError, comme indiqué ci-dessous :

<?php

namespace AppHttpControllers;

use RatchetMessageComponentInterface;
use RatchetConnectionInterface;

class ChatController 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();
    }
}

Dans ce contrôleur, $clients est une collection d'objets de connexion client, et la méthode onOpen représente Il existe une méthode de rappel lorsqu'un nouveau client se connecte. La méthode onMessage représente la méthode de rappel lorsqu'un message client est reçu. La méthode onClose représente la méthode de rappel lorsque le client se déconnecte. La méthode onError représente la méthode de rappel lorsqu'une erreur de connexion se produit.

  1. Créer un service WebSocket

Ajoutez le code suivant dans le fichier de routage routes/web.php du projet Laravel :

use RatchetHttpHttpServer;
use RatchetWebSocketWsServer;
use AppHttpControllersChatController;

Route::get('/chat', function () {
    $server = IoServer::factory(
        new HttpServer(
            new WsServer(
                new ChatController()
            )
        ),
        8080
    );
    $server->run();
});

Ce code indique qu'un service WebSocket est créé, en écoute sur le port local 8080, et le le contrôleur correspondant au service est ChatController.

  1. Code client

Dans la page front-end, vous pouvez établir une connexion avec le service WebSocket via le code JavaScript, comme indiqué ci-dessous :

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

conn.onopen = function (e) {
    console.log("Connection established!");
};

conn.onmessage = function (e) {
    console.log("Received: " + e.data);
};

conn.onclose = function (e) {
    console.log("Connection closed!");
};

conn.onerror = function (e) {
    console.log("Error occurred: " + e.data);
};

function sendMessage() {
    var input = document.getElementById("messageInput");
    conn.send(input.value);
    input.value = "";
}

Ce code indique que la connexion entre WebSocket et le serveur est établie, et il est affiché lorsqu'un message du serveur est reçu. Accédez à la console et appelez la méthode send lors de l'envoi d'un message.

  1. Test

Après avoir démarré le projet Laravel, visitez http://localhost/chat dans le navigateur pour établir une connexion avec le serveur via WebSocket afin d'obtenir une transmission de données en temps réel.

Ce qui précède est un exemple de code permettant d'utiliser PHP et WebSocket pour réaliser une transmission de données en temps réel. Il peut être développé plus en détail en fonction des besoins réels pour améliorer les performances en temps réel et les performances de l'application.

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