Implementierung von Websocket-Broadcast mit ThinkPHP6
Jun 20, 2023 am 08:41 AMMit der kontinuierlichen Weiterentwicklung moderner Webanwendungen ist Echtzeitkommunikation zu einer der notwendigen Funktionen geworden. Die WebSocket-Technologie ist eine der beliebtesten Echtzeitkommunikationsmethoden, mit der eine dauerhafte bidirektionale Verbindung zwischen dem Server und dem Client hergestellt werden kann, um eine Echtzeitkommunikation zu erreichen.
ThinkPHP ist ein sehr beliebtes PHP-Framework. ThinkPHP 6 wird mit dem Swoole-Erweiterungspaket geliefert, was die Verwendung der WebSocket-Technologie sehr einfach macht. In diesem Artikel wird erl?utert, wie Sie mit dem ThinkPHP 6-Framework eine WebSocket-Broadcast-Funktion implementieren.
Umgebungsanforderungen
Bevor Sie beginnen, müssen Sie die folgende Umgebung vorbereiten:
- PHP 7.2+
- Swoole-Erweiterung
- Composer
- Grundkenntnisse in der Webentwicklung
Projekt erstellen
Zuerst müssen wir Folgendes tun erstellen ein neues Projekt:
composer create-project topthink/think my-project
Um die Verwendung von WebSocket zu erleichtern, müssen wir dann die Swoole-Erweiterung in die Datei composer.json
des Projekts einfügen: composer.json
文件中添加 Swoole 擴展:
"require": { "topthink/think-swoole": "^2.0", "swoole/swoole": "^4.7" }
完成后,運行以下命令進行安裝:
composer install
創(chuàng)建控制器
接下來,我們需要創(chuàng)建一個控制器來處理 WebSocket 的請求。在 app/controller
目錄下創(chuàng)建一個名為 Websocket.php
的文件,寫入以下代碼:
<?php declare(strict_types=1); namespace appcontroller; use thinkswooleWebsocket as SwooleWebsocket; use SwooleWebSocketFrame; class Websocket extends SwooleWebsocket { /** * 監(jiān)聽連接事件 * @param SwooleWebSocketServer $server * @param SwooleHttpRequest $request */ public function onOpen($server, $request) { } /** * 監(jiān)聽接收消息事件 * @param SwooleWebSocketServer $server * @param Frame $frame */ public function onMessage($server, Frame $frame) { } /** * 監(jiān)聽關(guān)閉事件 * @param SwooleWebSocketServer $server * @param int $fd */ public function onClose($server, $fd) { } }
在上面的代碼中,我們繼承了 thinkswooleWebsocket
類,并重寫了其中的三個方法:
onOpen
方法用于監(jiān)聽連接事件;onMessage
方法用于監(jiān)聽接收消息事件;onClose
方法用于監(jiān)聽關(guān)閉事件。
當(dāng)前,這些方法并沒有做任何事情,接下來我們將會在這些方法中添加 WebSocket 通信的邏輯。
注冊路由
在控制器創(chuàng)建好之后,我們需要在路由中進行注冊。在 app/route.php
文件中添加以下內(nèi)容:
use thinkacadeRoute; Route::post('/ws', 'Websocket@onMessage')->middleware( hinkmiddlewareAllowCrossDomain::class);
這里使用了 Route::post
方法來注冊路由。這個路由的請求方式是 POST
,路徑為 /ws
,并將請求映射到了 Websocket
控制器的 onMessage
方法上。
編寫 WebSocket 通信邏輯
現(xiàn)在,我們已經(jīng)完成了 WebSocket 路由和控制器的創(chuàng)建與注冊。接下來,我們需要在控制器中添加 WebSocket 通信的邏輯。我們將使用 Swoole 的 WebSocket 服務(wù)端來實現(xiàn) WebSocket 通信。
在 onOpen
方法中,我們可以獲取客戶端的連接對象,并將其存儲起來,以便后續(xù)使用。在 onMessage
方法中,我們可以獲取客戶端發(fā)送的消息,并將這條消息廣播給其它客戶端。在 onClose
方法中,我們需要將客戶端從連接池中移除。
在 app/controller
目錄下創(chuàng)建一個名為 WebSocketServer.php
的文件,寫入以下代碼:
<?php declare(strict_types=1); namespace appcontroller; use SwooleHttpResponse; use SwooleWebSocketFrame; use SwooleWebSocketServer; use thinkswoolewebsocketHandlerInterface; class WebSocketServer implements HandlerInterface { /** * @var array $connections */ private $connections = []; /** * 監(jiān)聽連接事件 * @param Server $server * @param SwooleHttpRequest $request */ public function onOpen(Server $server, SwooleHttpRequest $request): void { $this->connections[$request->fd] = $request->fd; echo "client-{$request->fd} is connected "; } /** * 監(jiān)聽消息事件 * @param Server $server * @param Frame $frame */ public function onMessage(Server $server, Frame $frame): void { foreach ($this->connections as $fd) { $info = $server->getClientInfo((int)$fd); if ($info && isset($info['websocket_status']) && $info['websocket_status'] == WEBSOCKET_STATUS_FRAME) { $server->push($fd, $frame->data); } else { unset($this->connections[$fd]); } } echo "received message from client-{$frame->fd}: {$frame->data} "; } /** * 監(jiān)聽關(guān)閉事件 * @param Server $server * @param int $fd * @param int $reactorId */ public function onClose(Server $server, int $fd, int $reactorId): void { unset($this->connections[$fd]); echo "client-{$fd} is closed "; } /** * @param Response $response */ public function onHandShake(Request $request, Response $response): bool { // Do nothing return true; } }
配置 WebSocket 服務(wù)
在寫入 WebSocket 的服務(wù)代碼之前,我們需要在 config
目錄下創(chuàng)建一個名為 swoole.php
的配置文件,寫入以下內(nèi)容:
return [ 'socket_type' => 'websocket', 'host' => '0.0.0.0', 'port' => 9501, 'mode' => SWOOLE_PROCESS, 'sock_type' => SWOOLE_SOCK_TCP, 'settings' => [ 'worker_num' => swoole_cpu_num(), ], 'handler' => ppcontrollerWebSocketServer::class, ];
在上面的代碼中,我們通過配置文件告訴應(yīng)用程序如何啟動 Swoole WebSocket 服務(wù)。我們啟動 websocket
socket 類型,綁定在 0.0.0.0:9501
上,并開啟了多進程模式,使用 TCP 協(xié)議。worker_num
配置項設(shè)置了服務(wù)器的進程數(shù),這里使用了 swoole_cpu_num()
用于返回系統(tǒng) CPU 數(shù)量;handler
配置項指定了我們在上文中創(chuàng)建的 WebSocketServer
類。
運行 WebSocket 服務(wù)
在完成了創(chuàng)建、配置 WebSocket 服務(wù)的代碼之后,我們需要運行一下代碼,來開啟 WebSocket 服務(wù)。在命令行中執(zhí)行以下命令即可:
php think swoole start --mode=websocket
Websocket 服務(wù)已經(jīng)啟動,你可以通過訪問你的應(yīng)用程序來測試它。你可以使用這個地址:ws://your-domain:9501/ws
rrreee
rrreee
Kontroll-Controller erstellenAls n?chstes müssen wir einen Controller erstellen, um WebSocket-Anfragen zu verarbeiten. Erstellen Sie eine Datei mit dem NamenWebsocket.php
im Verzeichnis app/controller
und schreiben Sie den folgenden Code: ??rrreee??Im obigen Code haben wir thinkswooleWebsocket
geerbt >-Klasse und überschreibt drei darin enthaltene Methoden: ??????onOpen
-Methode wird zum Abh?ren von Verbindungsereignissen verwendet; ????onMessage
-Methode wird zum Abh?ren von Empfangsnachrichtenereignissen verwendet; Die Methode ????onClose
wird verwendet, um auf Abschlussereignisse zu warten. ??????Derzeit bewirken diese Methoden nichts. Als N?chstes werden wir diesen Methoden die Logik der WebSocket-Kommunikation hinzufügen. ????Route registrieren????Nachdem der Controller erstellt wurde, müssen wir ihn in der Route registrieren. Fügen Sie den folgenden Inhalt in die Datei app/route.php
ein: ??rrreee??Die Methode Route::post
wird hier verwendet, um die Route zu registrieren. Die Anforderungsmethode dieser Route ist POST
, der Pfad ist /ws
und die Anforderung wird der onMessage
des Websocket zugeordnet
Controller > Methodisch. ????WebSocket-Kommunikationslogik schreiben????Jetzt haben wir die Erstellung und Registrierung von WebSocket-Routen und -Controllern abgeschlossen. Als n?chstes müssen wir die Logik für die WebSocket-Kommunikation im Controller hinzufügen. Wir werden den WebSocket-Server von Swoole verwenden, um die WebSocket-Kommunikation zu implementieren. ????In der Methode onOpen
k?nnen wir das Verbindungsobjekt des Clients abrufen und für die sp?tere Verwendung speichern. Mit der Methode onMessage
k?nnen wir die vom Client gesendete Nachricht abrufen und diese Nachricht an andere Clients senden. In der Methode onClose
müssen wir den Client aus dem Verbindungspool entfernen. ????Erstellen Sie eine Datei mit dem Namen WebSocketServer.php
im Verzeichnis app/controller
und schreiben Sie den folgenden Code: ??rrreee??Konfigurieren Sie den WebSocket-Dienst.????Schreiben Sie den WebSocket, bevor Sie ihn bereitstellen Code müssen wir eine Konfigurationsdatei mit dem Namen swoole.php
im Verzeichnis config
erstellen und den folgenden Inhalt schreiben: ??rrreee??Im obigen Code sagen wir der Anwendung, wie um den Swoole WebSocket-Dienst über die Konfigurationsdatei zu starten. Wir starten den Socket-Typ websocket
, binden ihn an 0.0.0.0:9501
und aktivieren den Multiprozessmodus mithilfe des TCP-Protokolls. Das Konfigurationselement worker_num
legt die Anzahl der Prozesse auf dem Server fest. swoole_cpu_num()
wird hier verwendet, um die Anzahl der System-CPUs zurückzugeben Das Konfigurationselement gibt unsere oben erstellte Klasse WebSocketServer
an. ????Führen Sie den WebSocket-Dienst aus????Nachdem wir den Code zum Erstellen und Konfigurieren des WebSocket-Dienstes fertiggestellt haben, müssen wir den Code ausführen, um den WebSocket-Dienst zu starten. Führen Sie einfach den folgenden Befehl in der Befehlszeile aus: ??rrreee??Der Websocket-Dienst wurde gestartet und Sie k?nnen ihn testen, indem Sie auf Ihre Anwendung zugreifen. Sie k?nnen diese Adresse verwenden: ws://your-domain:9501/ws
. ?ffnen Sie mehrere Registerkarten im Browser, um die WebSocket-Verbindung sowie die Funktionen zum Senden und Empfangen von Nachrichten zu testen. ????Zusammenfassung????In diesem Artikel wird erl?utert, wie Sie mit dem ThinkPHP 6-Framework eine WebSocket-Broadcast-Funktion implementieren. Dies erreichen wir, indem wir Controller erstellen, Routen registrieren, WebSocket-Kommunikationslogik schreiben und den WebSocket-Dienst konfigurieren. Dieses Beispiel kann als einfache Best Practice für WebSocket verwendet werden und bietet uns eine Referenz für die Entwicklung erweiterter WebSocket-Funktionen. ??Das obige ist der detaillierte Inhalt vonImplementierung von Websocket-Broadcast mit ThinkPHP6. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Um das ThinkPHP-Projekt auszuführen, müssen Sie: Composer installieren, das Projektverzeichnis aufrufen und http://localhost:8000 aufrufen.

ThinkPHP verfügt über mehrere Versionen, die für verschiedene PHP-Versionen entwickelt wurden. Zu den Hauptversionen geh?ren 3.2, 5.0, 5.1 und 6.0, w?hrend Nebenversionen dazu dienen, Fehler zu beheben und neue Funktionen bereitzustellen. Die neueste stabile Version ist ThinkPHP 6.0.16. Berücksichtigen Sie bei der Auswahl einer Version die PHP-Version, die Funktionsanforderungen und den Community-Support. Für optimale Leistung und Support wird empfohlen, die neueste stabile Version zu verwenden.

Schritte zum lokalen Ausführen von ThinkPHP Framework: Laden Sie ThinkPHP Framework herunter und entpacken Sie es in ein lokales Verzeichnis. Erstellen Sie einen virtuellen Host (optional), der auf das ThinkPHP-Stammverzeichnis verweist. Konfigurieren Sie Datenbankverbindungsparameter. Starten Sie den Webserver. Initialisieren Sie die ThinkPHP-Anwendung. Greifen Sie auf die URL der ThinkPHP-Anwendung zu und führen Sie sie aus.

PHP und WebSocket: Best-Practice-Methoden für die Echtzeit-Datenübertragung Einführung: Bei der Entwicklung von Webanwendungen ist die Echtzeit-Datenübertragung eine sehr wichtige technische Anforderung. Das herk?mmliche HTTP-Protokoll ist ein Anforderungs-Antwort-Modellprotokoll und kann keine Datenübertragung in Echtzeit effektiv erreichen. Um den Anforderungen der Echtzeit-Datenübertragung gerecht zu werden, wurde das WebSocket-Protokoll entwickelt. WebSocket ist ein Vollduplex-Kommunikationsprotokoll, das eine M?glichkeit zur Vollduplex-Kommunikation über eine einzelne TCP-Verbindung bietet. Im Vergleich zu H

So implementieren Sie mithilfe von Java und WebSocket einen Aktienkurs-Push in Echtzeit. Einführung: Mit der rasanten Entwicklung des Internets ist der Echtzeit-Aktienkurs-Push zu einem der Schwerpunkte der Anleger geworden. Die traditionelle B?rsen-Push-Methode weist Probleme wie hohe Verz?gerungen und langsame Aktualisierungsgeschwindigkeit auf. Für Anleger kann die Unf?higkeit, rechtzeitig die neuesten B?rseninformationen zu erhalten, zu Fehlern bei Anlageentscheidungen führen. Echtzeit-Aktienkurs-Push auf Basis von Java und WebSocket kann dieses Problem effektiv l?sen, sodass Anleger so schnell wie m?glich die neuesten Aktienkursinformationen erhalten.

Mit der kontinuierlichen Weiterentwicklung der Internettechnologie ist Echtzeitkommunikation zu einem unverzichtbaren Bestandteil des t?glichen Lebens geworden. Mit der WebSockets-Technologie kann eine effiziente Echtzeitkommunikation mit geringer Latenz erreicht werden, und PHP als eine der am weitesten verbreiteten Entwicklungssprachen im Internetbereich bietet auch entsprechende WebSocket-Unterstützung. In diesem Artikel wird erl?utert, wie Sie mithilfe von PHP und WebSocket eine Echtzeitkommunikation erreichen, und es werden spezifische Codebeispiele bereitgestellt. 1. Was ist WebSocket? WebSocket ist ein Single

Leistungsvergleich von Laravel- und ThinkPHP-Frameworks: ThinkPHP schneidet im Allgemeinen besser ab als Laravel und konzentriert sich auf Optimierung und Caching. Laravel schneidet gut ab, aber für komplexe Anwendungen ist ThinkPHP m?glicherweise besser geeignet.

In diesem Artikel vergleichen wir Server Sent Events (SSE) und WebSockets, beides zuverl?ssige Methoden zur übermittlung von Daten. Wir werden sie in acht Aspekten analysieren, darunter Kommunikationsrichtung, zugrunde liegendes Protokoll, Sicherheit, Benutzerfreundlichkeit, Leistung, Nachrichtenstruktur, Benutzerfreundlichkeit und Testtools. Ein Vergleich dieser Aspekte l?sst sich wie folgt zusammenfassen: Kategorie Server Sent Event (SSE) WebSocket-Kommunikationsrichtung Einseitig bidirektional Zugrundeliegendes Protokoll HTTP WebSocket-Protokoll Sicherheit Gleich wie HTTP Vorhandene Sicherheitslücken Benutzerfreundlichkeit Einstellungen Einfache Einstellungen Komplexe Leistung Schnelle Nachrichtenversandgeschwindigkeit Betroffen von der Nachrichtenverarbeitung und dem Verbindungsmanagement. Nachrichtenstruktur Nur Text oder Bin?r. Benutzerfreundlichkeit. Weit verbreitet. Hilfreich für die WebSocket-Integration
