So verwenden Sie WebSockets in PHP

WBOY
Freigeben: 2023-06-11 18:10:01
Original
2492 Leute haben es durchsucht

Mit der Entwicklung der Netzwerktechnologie ist WebSocket (Web Socket) zu einem beliebten Protokoll geworden, das einen Echtzeit-Kommunikationskanal zwischen dem Browser und dem Server aufbauen kann, um eine Verbindung aufrechtzuerhalten. Dieses Protokoll spielt eine große Rolle bei der Ermöglichung von Echtzeit-Kommunikationsfunktionen in Webanwendungen.

Im Bereich der PHP-Entwicklung wird zunehmend WebSocket eingesetzt. In diesem Artikel stellen wir die Verwendung von WebSocket in PHP vor.

  1. Installieren Sie die WebSocket-Bibliothek

Zuerst müssen wir eine PHP-WebSocket-Bibliothek verwenden, um WebSocket-Funktionen einfach in PHP zu implementieren. Die derzeit beliebtesten PHP-WebSocket-Bibliotheken sind Ratchet und PHP WebSocket.

Hier verwenden wir Ratchet, das die ReactPHP-Bibliothek zur Implementierung von asynchronem ereignisgesteuertem PHP verwendet, perfekt mit anderen Frameworks kompatibel ist und über Flexibilität und Skalierbarkeit verfügt.

Bevor wir beginnen, müssen wir zuerst Composer installieren, da Ratchet mit Composer installiert und verwaltet wird.

Composer kann hier heruntergeladen werden: https://getcomposer.org/

Installieren Sie Ratchet mit Composer:

composer require cboden/ratchet
Nach dem Login kopieren
  1. Schreiben eines PHP-WebSocket-Servers

In diesem Beispiel werden wir einen einfachen Chatroom implementieren Ratchet schreibt einen WebSocket-Server. Die folgenden Schritte sind zu implementieren:

a. Erstellen Sie einen WebSocket-Server

use RatchetServerIoServer;
use RatchetHttpHttpServer;
use RatchetWebSocketWsServer;

require dirname(__DIR__) . '/vendor/autoload.php';

$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new Chat()
        )
    ),
    8080
);

$server->run();
Nach dem Login kopieren

Hier wird zuerst die Ratchet-Bibliothek vorgestellt und dann ein WebSocket-Server erstellt, wobei HttpServer und WsServer verwendet werden, um die HTTP- bzw. WebSocket-Protokollunterstützung anzugeben und zu übergeben sie an die Chat-Klasse weiter (Später wird gezeigt, dass die Chat-Klasse zur Verarbeitung von Client-Verbindungsanfragen verwendet wird).

Hier hören wir Port 8080.

b. Erstellen Sie einen Chatroom

use RatchetMessageComponentInterface;
use RatchetConnectionInterface;

class Chat implements MessageComponentInterface
{
    public $clients;

    public function __construct()
    {
        $this->clients = new SplObjectStorage;
    }

    public function onOpen(ConnectionInterface $conn)
    {
        $this->clients->attach($conn);
    }

    public function onMessage(ConnectionInterface $from, $msg)
    {
        foreach ($this->clients as $client) {
            if ($client !== $from) {
                $client->send($msg);
            }
        }
    }

    public function onClose(ConnectionInterface $conn)
    {
        $this->clients->detach($conn);
    }

    public function onError(ConnectionInterface $conn, Exception $e)
    {
        $conn->close();
    }
}
Nach dem Login kopieren

Hier erstellen wir eine Klasse namens Chat, die die MessageComponentInterface-Schnittstelle implementiert. Diese Schnittstelle definiert die vom WebSocket-Server in verschiedenen Verbindungszuständen ausgeführten Vorgänge.

Konkret haben wir im Konstruktor eine Client-Variable deklariert, bei der es sich um das SplObjectStorage-Objekt handelt, das den verbundenen Client speichert. In der onOpen-Methode wird dieser Variablen das Verbindungsobjekt zugewiesen.

Wenn von einem Client eine Nachricht eingeht, senden wir die Nachricht über die onMessage-Methode, die bei jeder Verbindung empfangen wird.

In der onClose-Methode wird das Verbindungsobjekt aus der Variablen entfernt. Wenn ein Fehler auftritt und die Client-Verbindung nicht verarbeitet werden kann, wird unsere Funktion onError aufgerufen.

  1. Schreiben Sie clientseitigen JavaScript-Code

Als nächstes benötigen wir clientseitigen JavaScript-Code, um eine Verbindung zum WebSocket-Server herzustellen.

let socket = new WebSocket('ws://localhost:8080');
socket.onopen = function(event) {
  console.log('WebSocket连接已建立');
};

socket.onmessage = function(event) {
  console.log('收到消息:' + event.data);
};
Nach dem Login kopieren

Hier verwenden wir direkt die API des WebSocket-Objekts, um eine Verbindung herzustellen und Nachrichten an den Server zu senden und zu empfangen.

  1. Führen Sie den WebSocket-Server aus

Wenn Sie die oben genannten Schritte ausgeführt haben, haben Sie erfolgreich einen WebSocket-Server geschrieben. Führen Sie nun Ihren Server aus, entweder über die Befehlszeile:

php server.php
Nach dem Login kopieren

Wenn Sie den Server über die Befehlszeile starten, sollten Ergebnisse ähnlich den folgenden angezeigt werden:

2019-03-22 11:46:55 WebSocketServer: Listening on 0.0.0.0:8080
2019-03-22 11:52:50 WebSocketServer: Opened connection to http://localhost:54616
Nach dem Login kopieren

bedeutet, dass der WebSocket-Dienst erfolgreich gestartet wurde und Port 8080 überwacht.

  1. Testen Sie die WebSocket-Verbindung

Öffnen Sie abschließend den Browser und besuchen Sie http://localhost/chat.html. Sie können die Browserverbindung sehen und dem WebSocket-Server beitreten.

let socket = new WebSocket('ws://localhost:8080');
socket.onopen = function(event) {
  console.log('WebSocket连接已建立');
  socket.send('欢迎加入聊天室');
};

socket.onmessage = function(event) {
  console.log('收到消息:' + event.data);
};
Nach dem Login kopieren

Hier senden wir eine Nachricht an den Server und protokollieren sie in der Konsole, wenn die Servernachricht empfangen wird.

Wenn Sie die Testwebseite ausführen, sehen Sie in der Konsole eine Ausgabe ähnlich der folgenden:

WebSocket已连接
WebSocket收到消息:欢迎加入聊天室
Nach dem Login kopieren

Jetzt haben Sie WebSocket erfolgreich in PHP verwendet und einen einfachen Chatroom erstellt. Ich hoffe, dieses Tutorial kann Ihnen hilfreich sein.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie WebSockets in PHP. 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!