Maison  >  Article  >  cadre php  >  Comment utiliser WebSocket pour la communication en temps réel dans ThinkPHP6 ?

Comment utiliser WebSocket pour la communication en temps réel dans ThinkPHP6 ?

WBOY
WBOYoriginal
2023-06-12 10:40:392047parcourir

WebSocket est un protocole de communication full-duplex qui peut établir une connexion en temps réel entre le serveur et le client pour établir une communication en temps réel. Dans le développement Web, le framework PHP couramment utilisé est ThinkPHP. Alors, comment utiliser WebSocket pour la communication en temps réel dans ThinkPHP6 ?

  1. Installer l'extension swoole

Vous devez d'abord installer l'extension swoole sur le serveur, vous pouvez utiliser la commande composer pour l'installer : # 🎜🎜#

composer require swoole/swoole
#🎜 🎜#Remarque : L'utilisation de l'extension swoole nécessite une version PHP >=7.0.

Créer un service WebSocket
  1. Dans ThinkPHP6, vous pouvez créer un service WebSocket via des commandes personnalisées. Ouvrez l'outil de ligne de commande, entrez dans le répertoire racine du projet et exécutez la commande suivante :
php think make:command WebSocket

Après avoir exécuté la commande, le fichier WebSocket.php sera généré dans le répertoire app/command. Dans le fichier, ajoutez le code suivant :

<?php
namespace appcommand;

use swoole_websocket_server;
use swoole_http_request;
use thinkconsoleCommand;
use thinkconsoleInput;
use thinkconsoleOutput;

class WebSocket extends Command
{
    protected function configure()
    {
        // 给命令起一个名字
        $this->setName('swoole:websocket')
            ->setDescription('Start websocket server');
    }

    protected function execute(Input $input, Output $output)
    {
        $server = new swoole_websocket_server("0.0.0.0", 9501);

        // 监听WebSocket连接打开事件
        $server->on('open', function (swoole_websocket_server $server, swoole_http_request $request) {
            echo "connection open: {$request->fd}
";
        });

        // 监听WebSocket消息事件
        $server->on('message', function (swoole_websocket_server $server, $frame) {
            echo "received message: {$frame->data}
";

            // 广播消息给所有连接的客户端
            $server->push($frame->fd, "this is server");
        });

        // 监听WebSocket连接关闭事件
        $server->on('close', function ($ser, $fd) {
            echo "connection close: {$fd}
";
        });

        $server->start();
    }
}

Exécutez la commande suivante pour démarrer le service WebSocket :

php think swoole:websocket

Utiliser WebSocket dans la vue
  1. Dans la vue, vous pouvez utiliser l'API WebSocket de JavaScript pour communiquer avec le serveur en temps réel. Par exemple :
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>WebSocket</title>
</head>
<body>
    <script>
        var ws = new WebSocket('ws://localhost:9501');

        ws.onopen = function(){
            console.log('WebSocket open');
        };

        ws.onmessage = function(ev){
            console.log('WebSocket message: ' + ev.data);
        };

        ws.onclose = function(){
            console.log('WebSocket close');
        };
    </script>
</body>
</html>

Le code ci-dessus crée une instance WebSocket et se connecte au service WebSocket local. Lorsque le serveur envoie un message, la fonction onmessage est appelée pour le traitement. Vous pouvez envoyer des messages au serveur en appelant la fonction d'envoi de l'instance.

À ce stade, le service WebSocket a été créé avec succès et a établi une connexion de communication en temps réel avec le front-end.

Summary

Dans ThinkPHP6, avec l'aide de l'extension swoole, la fonction de communication en temps réel de WebSocket peut être facilement implémentée. En activant le service WebSocket via des commandes personnalisées et en le combinant avec l'API JavaScript WebSocket, une communication en temps réel peut être réalisée dans les applications Web pour répondre à une variété de besoins commerciaux.

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