Heim  >  Artikel  >  Backend-Entwicklung  >  Wie verwende ich WebSocket in PHP?

Wie verwende ich WebSocket in PHP?

WBOY
WBOYOriginal
2023-05-12 08:27:111555Durchsuche

Da Webanwendungen immer komplexer werden, werden Echtzeitkommunikation und Daten-Push immer häufiger. Hier kommt WebSocket ins Spiel. WebSocket ist ein Protokoll, das es Servern und Clients ermöglicht, dauerhafte Verbindungen für die bidirektionale Kommunikation für Echtzeitkommunikation und Daten-Push herzustellen. In diesem Artikel besprechen wir die Verwendung von WebSocket in PHP.

  1. Einführung in das WebSocket-Protokoll

WebSocket ist ein Vollduplex-TCP-basiertes Protokoll, das es dem Server und dem Client ermöglicht, in Echtzeit zu kommunizieren, nachdem eine Verbindung hergestellt wurde. Im Gegensatz zum HTTP-Request-Response-Modell bleibt eine WebSocket-Verbindung nach dem Verbindungsaufbau immer offen, sodass nicht mehrere HTTP-Handshakes erforderlich sind.

WebSocket ist ein Binärprotokoll, das mehrere Datentypen unterstützt, einschließlich Text, Binär, JSON, XML usw. Dies macht WebSocket ideal für Echtzeitkommunikation und Daten-Pushing.

  1. Installieren Sie die WebSocket-Bibliothek.

Die Verwendung von WebSocket in PHP erfordert die Verwendung einer Bibliothek. In diesem Artikel verwenden wir die Ratchet-Bibliothek. Um Ratchet zu installieren, können Sie den folgenden Befehl über Composer ausführen:

composer require cboden/ratchet

Nachdem die Installation abgeschlossen ist, können wir mit dem Schreiben von Code zur Implementierung der WebSocket-Anwendung beginnen.

  1. Implementieren eines WebSocket-Dienstes

Hier ist ein einfaches Beispiel für die Implementierung eines WebSocket-Dienstes, der eine Nachricht von einem Client empfängt und die Nachricht an alle verbundenen Clients sendet:

use RatchetServerIoServer;
use RatchetHttpHttpServer;
use RatchetWebSocketWsServer;
use RatchetMessageComponentInterface;
use RatchetConnectionInterface;

class Chat implements MessageComponentInterface {
    protected $clients;

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

    public function onOpen(ConnectionInterface $conn) {
        $this->clients->attach($conn);
        echo "New client connected: {$conn->resourceId}
";
    }

    public function onClose(ConnectionInterface $conn) {
        $this->clients->detach($conn);
        echo "Client disconnected: {$conn->resourceId}
";
    }

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

    public function onError(ConnectionInterface $conn, Exception $e) {
        echo "Error: {$e->getMessage()}
";
        $conn->close();
    }
}

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

echo "Server started
";
$server->run();

Im obigen Beispiel definieren wir a Klasse namens Chat, die die MessageComponentInterface-Schnittstelle implementiert. Diese Klasse enthält spezielle Methoden zum Umgang mit Verbindungen, Verbindungsabbrüchen und Nachrichten von Clients.

onOpen(ConnectionInterface $conn): Diese Methode wird aufgerufen, wenn der Client eine Verbindung zum Server herstellt. Hier fügen wir die Verbindung zum Client-Objekt hinzu.

onClose(ConnectionInterface $conn): Diese Methode wird aufgerufen, wenn der Client die Verbindung schließt. Hier löschen wir das Verbindungs-Client-Objekt.

onMessage(ConnectionInterface $from, $msg): Diese Methode wird aufgerufen, wenn der Client eine Nachricht sendet. Hier senden wir Nachrichten an andere verbundene Clients.

onError(ConnectionInterface $conn, Exception $e): Diese Methode wird aufgerufen, wenn ein Fehler auftritt. Wir schließen hier die Verbindung.

Im obigen Beispiel haben wir auch einen HTTP-Server über die IoServer-Klasse erstellt, der Port 8080 überwacht, die Anfrage über HttpServer an den WebSocket-Server weiterleitet und die Anfrage über WsServer an die Chat-Klasse weiterleitet.

  1. Implementieren des Clients

Um eine Verbindung zu unserem WebSocket-Server herzustellen, müssen Sie einen Client implementieren. Hier ist ein einfaches Beispiel für die Verbindung zu einem Server und das Senden von Nachrichten an ihn:

<!DOCTYPE html>
<html>
<head>
    <title>WebSocket client</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
    <input type="text" id="message" placeholder="Enter your message">
    <button id="send">Send</button>

    <ul id="messages"></ul>

    <script>
        $(function () {
            var socket = new WebSocket('ws://localhost:8080');

            socket.onopen = function() {
                console.log('Connection opened');
            };

            socket.onclose = function() {
                console.log('Connection closed');
            };

            socket.onmessage = function(event) {
                var data = JSON.parse(event.data);
                $('#messages').append($('<li>').text(data.message));
            };

            $('#send').click(function() {
                var message = $('#message').val();
                socket.send(JSON.stringify({message: message}));
            });
        });
    </script>
</body>
</html>

Im obigen Beispiel erstellen wir eine neue WebSocket-Verbindung mithilfe des WebSocket-Objekts. Wenn eine Verbindung geöffnet oder geschlossen wird, werden die Ereignisse onopen und onclose ausgelöst. Wenn ein WebSocket eine Nachricht vom Server empfängt, wird das Ereignis onmessage ausgelöst. Wir haben die jQuery-Bibliothek verwendet, um das Klickereignis der Schaltfläche „Senden“ abzuhören, und beim Klicken haben wir den Wert des Texteingabefelds als Nachricht an den Server gesendet.

  1. Zusammenfassung

WebSocket ist ein leistungsstarkes Protokoll, das es dem Server und dem Client ermöglicht, eine dauerhafte Verbindung für die bidirektionale Kommunikation herzustellen, um Echtzeitkommunikation und Daten-Push zu erreichen. In diesem Artikel haben wir einen einfachen WebSocket-Server mithilfe der Ratchet-Bibliothek implementiert. Wir haben auch eine einfache HTML-Seite verwendet, um zu demonstrieren, wie man eine Verbindung zum Server herstellt und Nachrichten sendet. Wenn Sie eine interaktive Echtzeit-Webanwendung erstellen möchten, ist WebSocket ein absolut unverzichtbarer Bestandteil.

Das obige ist der detaillierte Inhalt vonWie verwende ich WebSocket in PHP?. 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