Heim  >  Artikel  >  PHP-Framework  >  Wie verwende ich WebSocket für die Echtzeitkommunikation in ThinkPHP6?

Wie verwende ich WebSocket für die Echtzeitkommunikation in ThinkPHP6?

WBOY
WBOYOriginal
2023-06-12 10:40:392034Durchsuche

WebSocket ist ein Vollduplex-Kommunikationsprotokoll, das eine Echtzeitverbindung zwischen dem Server und dem Client herstellen kann, um eine Echtzeitkommunikation zu erreichen. In der Webentwicklung ist ThinkPHP das am häufigsten verwendete PHP-Framework. Wie kann man WebSocket für die Echtzeitkommunikation in ThinkPHP6 verwenden?

  1. Installieren Sie die Swoole-Erweiterung

Zuerst müssen Sie die Swoole-Erweiterung auf dem Server installieren. Sie können den Composer-Befehl verwenden, um Folgendes zu installieren:

composer require swoole/swoole

Hinweis: Für die Verwendung der Swoole-Erweiterung ist eine PHP-Version >= 7.0 erforderlich.

  1. WebSocket-Dienst erstellen

In ThinkPHP6 können Sie einen WebSocket-Dienst über benutzerdefinierte Befehle erstellen. Öffnen Sie das Befehlszeilentool, geben Sie das Stammverzeichnis des Projekts ein und führen Sie den folgenden Befehl aus:

php think make:command WebSocket

Nach der Ausführung des Befehls wird die Datei WebSocket.php im Verzeichnis app/command generiert. Fügen Sie in dieser Datei den folgenden Code hinzu:

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

Führen Sie den folgenden Befehl aus, um den WebSocket-Dienst zu starten:

php think swoole:websocket
  1. Verwenden Sie WebSocket in der Ansicht

In der Ansicht können Sie die WebSocket-API von JavaScript verwenden, um mit dem Server in zu kommunizieren Echtzeit. Zum Beispiel:

<!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>

Der obige Code erstellt eine WebSocket-Instanz und stellt eine Verbindung zum lokalen WebSocket-Dienst her. Wenn der Server eine Nachricht sendet, wird die Funktion onmessage zur Verarbeitung aufgerufen. Sie können Nachrichten an den Server senden, indem Sie die Sendefunktion der Instanz aufrufen.

Zu diesem Zeitpunkt wurde der WebSocket-Dienst erfolgreich erstellt und eine Echtzeit-Kommunikationsverbindung mit dem Front-End hergestellt.

Zusammenfassung

In ThinkPHP6 kann mithilfe der Swoole-Erweiterung die WebSocket-Echtzeitkommunikationsfunktion einfach implementiert werden. Durch die Aktivierung des WebSocket-Dienstes über benutzerdefinierte Befehle und die Kombination mit der JavaScript-WebSocket-API kann Echtzeitkommunikation in Webanwendungen erreicht werden, um eine Vielzahl von Geschäftsanforderungen zu erfüllen.

Das obige ist der detaillierte Inhalt vonWie verwende ich WebSocket für die Echtzeitkommunikation in ThinkPHP6?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn