Ein vollständiges Tutorial zur Implementierung von Echtzeitkommunikation mit PHP und Swoole

WBOY
Freigeben: 2023-06-28 08:16:01
Original
1058 Leute haben es durchsucht

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

  1. Swoole WebSocket-Dienst

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();
Nach dem Login kopieren

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');
Nach dem Login kopieren

Nachdem der Client erfolgreich eine Verbindung hergestellt hat, gibt die Konsole die folgenden Informationen aus:

WebSocket connected
Received: hello
Nach dem Login kopieren

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();
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!