Mit der rasanten Entwicklung der Internet- und Mobilkommunikationstechnologie hat die Echtzeitkommunikation immer mehr Aufmerksamkeit auf sich gezogen. Durch die Echtzeitkommunikation können Instant Messaging zwischen Benutzern, Online-Audio- und Videoanrufe, Spielschlachten und andere Funktionen realisiert werden, wodurch Internetanwendungen mehr Möglichkeiten erhalten.
In diesem Artikel wird erläutert, wie Sie mit PHP und Swoole Echtzeitkommunikation erreichen. Ausgehend von einer einfachen WebSocket-Anwendung werden wir nach und nach die Grundkenntnisse der Socket-Programmierung und die Anwendungspraxis von Swoole einführen. Das Lesen dieses Artikels erfordert Grundkenntnisse in PHP-Grundlagen und Netzwerkprogrammierung.
1. WebSocket-Grundlagen
WebSocket ist ein bidirektionales Kommunikationsprotokoll, das auf dem HTTP-Protokoll basiert. Es verwendet ein Protokoll namens „Handshake“, um eine bidirektionale Kommunikation zu ermöglichen. Der Vorteil der WebSocket-Verbindung besteht darin, dass der Overhead sehr gering ist, die Echtzeitkommunikation sehr gut ist und eine bidirektionale Echtzeitkommunikation zwischen dem Client und dem Server hergestellt werden kann.
Die Einrichtung von WebSocket erfordert die folgenden Schritte:
1. Der Browser initiiert eine WebSocket-Handshake-Anfrage an den Server. Der Anforderungsheader enthält einige Schlüsselfelder, wie z. B. Upgrade, Verbindung, Sec-WebSocket-Key usw.
2. Der Server verarbeitet die WebSocket-Anfrage des Clients und gibt eine Antwortnachricht mit Feldern wie „Upgrade“, „Verbindung“ und „Sec-WebSocket-Accept“ im Antwortheader zurück, wenn sie den Spezifikationen entspricht.
3. Der Client empfängt die Antwortnachricht vom Server, überprüft das Feld „Sec-WebSocket-Accept“ und bestätigt, dass der WebSocket-Handshake erfolgreich eingerichtet wurde.
4. Beide Parteien können die Datenkommunikation starten und Text-, Binär-, Ping-, Pong- und andere Nachrichten senden.
Mit WebSocket in PHP können wir es über den von Swoole bereitgestellten WebSocket-Dienst implementieren. Im Folgenden wird die grundlegende Anwendung von Swoole vorgestellt.
2. Swoole-Grundlagen
1. Swoole installieren
Bevor wir Swoole verwenden können, müssen wir die Swoole-Erweiterung auf dem Server installieren. Sie können es mit dem folgenden Befehl installieren:
pecl install swoole
oder aus dem Quellcode installieren:
$ wget https://github.com/swoole/swoole-src/archive/v4.3.3.tar. gz
$ tar zxvf v4.3.3.tar.gz
$ cd swoole-src-4.3.3
$ phpize
$ ./configure
$ make && make install --with-swoole
Lassen Sie uns einen einfachen WebSocket-Dienst implementieren, der Port 9501 abhört und eine Hallo-Nachricht an den Client sendet, wenn der Client eine Verbindung mit dem Server herstellt.
<?php $server = new SwooleWebSocketServer("0.0.0.0", 9501); $server->on('open', function (SwooleWebSocketServer $server, $request) { echo "new client connected "; $server->push($request->fd, "hello"); }); $server->on('message', function (SwooleWebSocketServer $server, $frame) { echo "received message: {$frame->data} "; }); $server->start();
In diesem Code erstellen wir einen neuen WebSocket-Server und überwachen Port 9501. Wenn der Client eine Verbindung mit dem Server herstellt, wird das Open-Ereignis ausgelöst und eine Hallo-Nachricht an den Client gesendet. Wenn der Client eine Nachricht an den Server sendet, wird das Nachrichtenereignis ausgelöst und wir können die vom Client gesendeten Informationen per Echo ausgeben.
Nachdem wir den obigen Code gestartet haben, können wir den Browser oder den WebSocket-Client verwenden, um eine Verbindung zum Server herzustellen:
let ws = new WebSocket('ws://127.0.0.1:9501'); ws.onopen = function(event) { console.log('WebSocket connected'); }; ws.onmessage = function(event) { console.log('Received:', event.data); }; ws.send('Hello, Server');
Nachdem der Client erfolgreich eine Verbindung hergestellt hat, gibt die Konsole die folgenden Informationen aus:
WebSocket connected Received: hello
Zeigt an, dass der Client The erfolgreich empfangen hat Vom Server gesendete Hallo-Nachricht.
3. Implementieren Sie eine Echtzeit-Chat-Anwendung
Lassen Sie uns als Nächstes eine Echtzeit-Chat-Anwendung implementieren, die es mehreren Benutzern ermöglicht, in Echtzeit in einem Chatroom zu kommunizieren. Dies erfordert, dass wir den oben genannten WebSocket-Server weiter ausbauen, um die Grundfunktionen des Chatrooms zu implementieren.
<?php $server = new SwooleWebSocketServer("0.0.0.0", 9501); $server->set([ 'worker_num' => 2, //启动2个Worker进程 ]); $server->on('open', function (SwooleWebSocketServer $server, $request) { echo "new client connected "; foreach($server->connections as $fd) { $server->push($fd, "{$request->fd} joined the room"); } }); $server->on('message', function (SwooleWebSocketServer $server, $frame) { foreach($server->connections as $fd) { if ($fd != $frame->fd) { $server->push($fd, "user {$frame->fd}: {$frame->data}"); } } }); $server->on('close', function ($server, $fd) { echo "client {$fd} closed "; foreach($server->connections as $fds) { $server->push($fds, "{$fd} quited the room"); } }); $server->start();
Im obigen Code haben wir die Behandlung von Öffnungs- und Schließereignissen hinzugefügt. Wenn ein Benutzer eine Verbindung herstellt oder die Verbindung schließt, werden Nachrichten zum Beitreten oder Verlassen des Chatrooms an andere verbundene Benutzer gesendet. Wenn ein Benutzer eine Nachricht in einem Chatroom sendet, wird die Nachricht an andere Online-Benutzer gesendet.
Nachdem wir den obigen Code gestartet haben, können wir mehrere Browserfenster verwenden, um separat eine Verbindung zum Server herzustellen und denselben Chatraum zu betreten. Wenn ein Benutzer eine Nachricht sendet, können andere Benutzer die Nachricht in Echtzeit empfangen.
In diesem Artikel wird erläutert, wie Sie mit PHP und Swoole Echtzeitkommunikation erreichen, von einfachen WebSocket-Anwendungen bis hin zu Echtzeit-Chatroom-Anwendungen. Swoole bietet eine flexiblere asynchrone Programmiermethode, die das Schreiben von Anwendungen mit hoher Leistung, hoher Parallelität und geringer Latenz erleichtert.
Das obige ist der detaillierte Inhalt vonEin vollständiges Tutorial zur Implementierung von Echtzeitkommunikation mit PHP und Swoole. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!