Heim  >  Artikel  >  PHP-Framework  >  Verwenden von WebSocket in ThinkPHP6

Verwenden von WebSocket in ThinkPHP6

王林
王林Original
2023-06-21 12:49:393133Durchsuche

Mit der rasanten Entwicklung der mobilen Internettechnologie ist die Nachfrage der Benutzer nach Instant Messaging und Echtzeitinteraktion sukzessive gestiegen. Als wichtiges Protokoll für die Echtzeitkommunikation im Web weist das WebSocket-Protokoll die Merkmale Vollduplexkommunikation, Echtzeit-Push und geringe Latenz auf und hat sich zum bevorzugten Protokoll in Echtzeit-Interaktionsszenarien entwickelt. Daher müssen wir in der Webentwicklung die Verwendung von WebSocket beherrschen, um eine Echtzeitkommunikation zu erreichen.

In PHP können wir die Swoole-Erweiterung verwenden, um die WebSocket-Funktionalität zu implementieren. Die Bereitstellung und Einrichtung von Swoole erfordert jedoch viel Zeit und Mühe. Für einige Entwickler, die mit Swoole nicht vertraut sind, ist der Lernaufwand ebenfalls relativ hoch.

Heute stellen wir vor, wie man WebSocket in ThinkPHP6 verwendet.

1. Installieren Sie die Erweiterung

Bevor wir WebSocket in ThinkPHP6 verwenden, müssen wir die Erweiterung topthink/thinker installieren. topthink/thinker 扩展。

composer require topthink/thinker:dev-master

topthink/thinker 是一个命令行工具,用于在 ThinkPHP6 中运行 PHP 代码和管理异步任务。

2. 配置 WebSocket

我们需要在项目的配置文件 config/socket.php 中配置 WebSocket。

<?php
return [
    // WebSocket服务器地址,使用内网穿透时填写内网地址
    'server' => '127.0.0.1:9501',

    // WebSocket的应用类,需要实现     hinkworkerServer 接口
    'worker_class' => 'appcontrollerWebSocket',
];

我们需要指定 server 的地址以及实现 Server 接口的类 worker_class,在这里我们将实现 WebSocket 功能的控制器类命名为 WebSocket,放在 appcontroller 目录下。

3. 实现 WebSocket

我们在 appcontroller 目录下创建一个名为 WebSocket 的控制器,在控制器中实现 Server 接口。

<?php
namespace appcontroller;

use thinkworkerServer;

class WebSocket implements Server
{
    protected $socket = 'websocket://127.0.0.1:9501';

    public function onMessage($connection, $data)
    {
        foreach ($this->worker->connections as $conn) {
            $conn->send('user ' . $connection->id . ' said: ' . $data);
        }
    }

    public function onConnect($connection)
    {
        echo "new connection from ip " . $connection->getRemoteIp() . "
";
    }

    public function onClose($connection)
    {
        echo "connection closed: " . $connection->id . "
";
    }

    public function onWorkerStart($worker)
    {
        // 初始化
    }
}

WebSocket 控制器类中,我们需要实现 onMessageonConnectonCloseonWorkerStart 四个方法。

  • onMessage: 当客户端发送数据时,会触发 onMessage 方法,参数 $connection 表示客户端的连接对象,$data 表示客户端发送的数据。
  • onConnect: 在客户端连接的时候会触发 onConnect 方法,参数 $connection 表示客户端的连接对象。
  • onClose: 在客户端断开连接的时候会触发 onClose 方法,参数 $connection 表示客户端的连接对象。
  • onWorkerStart: 在工作进程启动的时候会触发 onWorkerStart 方法,参数 $worker 表示当前工作进程的对象。

4. 运行 WebSocket

配置好 WebSocket 之后,我们可以使用 think 命令来启动 WebSocket。

php think worker:start

上述命令会启动一个 WebSocket 服务,并在控制台输出运行日志。

5. 测试 WebSocket

WebSocket 实现之后,我们可以使用 WebSocket 的客户端进行测试。我们可以使用 Chrome 浏览器并安装 Simple WebSocket Client 插件来进行测试。在插件中输入 WebSocket 服务器的地址,点击连接,即可开始使用 WebSocket 通信。

Simple WebSocket Clientrrreee

topthink/thinker ist ein Befehlszeilentool zum Ausführen von PHP-Code und zum Verwalten asynchroner Aufgaben in ThinkPHP6.

2. WebSocket konfigurieren

Wir müssen WebSocket in der Konfigurationsdatei config/socket.php konfigurieren. 🎜rrreee🎜Wir müssen die Adresse von server und die Klasse worker_class angeben, die die Server-Schnittstelle implementiert. Hier benennen wir die Controller-Klasse so implementiert die WebSocket-Funktion. Es ist WebSocket und wird im Verzeichnis appcontroller abgelegt. 🎜🎜3. WebSocket implementieren🎜🎜Wir erstellen einen Controller mit dem Namen WebSocket im Verzeichnis appcontroller und implementieren die Schnittstelle Server im Controller. 🎜rrreee🎜In der Controller-Klasse WebSocket müssen wir onMessage, onConnect, onClose und implementieren onWorkerStart vier Methoden. 🎜
  • onMessage: Wenn der Client Daten sendet, wird die Methode onMessage ausgelöst. Der Parameter $connection repräsentiert die des Clients Verbindungsobjekt. $data stellt die vom Client gesendeten Daten dar.
  • onConnect: Die Methode onConnect wird ausgelöst, wenn der Client eine Verbindung herstellt. Der Parameter $connection stellt das Verbindungsobjekt des Clients dar .
  • onClose: Die Methode onClose wird ausgelöst, wenn der Client die Verbindung trennt. Der Parameter $connection stellt die Verbindung des Clients dar. Objekt.
  • onWorkerStart: Die Methode onWorkerStart wird ausgelöst, wenn der Worker-Prozess startet. Der Parameter $worker stellt das Objekt von dar der aktuelle Worker-Prozess.
🎜4. Führen Sie WebSocket aus🎜🎜Nach der Konfiguration von WebSocket können wir den Befehl think verwenden, um WebSocket zu starten. 🎜rrreee🎜Der obige Befehl startet einen WebSocket-Dienst und gibt das Betriebsprotokoll auf der Konsole aus. 🎜🎜5. WebSocket testen🎜🎜Nachdem WebSocket implementiert wurde, können wir den WebSocket-Client zum Testen verwenden. Wir können den Browser Chrome verwenden und zum Testen das Plug-in Simple WebSocket Client installieren. Geben Sie die Adresse des WebSocket-Servers in das Plug-in ein und klicken Sie auf „Verbinden“, um mit der Nutzung der WebSocket-Kommunikation zu beginnen. 🎜🎜In Simple WebSocket Client können wir Zeichen eingeben und auf Senden klicken. Außerdem können wir das Ausgabeprotokoll in der Hintergrundkonsole sehen, das anzeigt, dass die WebSocket-Kommunikation normal funktioniert. 🎜🎜Zusammenfassung🎜🎜In diesem Artikel haben wir die Verwendung von WebSocket in ThinkPHP6 vorgestellt. Das WebSocket-Protokoll ist das bevorzugte Protokoll für die Echtzeitkommunikation und seine Einsatzszenarien sind sehr vielfältig. In der tatsächlichen Entwicklung können wir WebSocket verwenden, um Echtzeit-Kommunikationsfunktionen je nach Bedarf einfach zu implementieren und die Benutzererfahrung zu verbessern. 🎜

Das obige ist der detaillierte Inhalt vonVerwenden von WebSocket 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