Heim > Backend-Entwicklung > PHP-Tutorial > So erreichen Sie Echtzeitkommunikation mit PHP und WebSocket

So erreichen Sie Echtzeitkommunikation mit PHP und WebSocket

WBOY
Freigeben: 2023-12-17 22:26:01
Original
1411 Leute haben es durchsucht

So erreichen Sie Echtzeitkommunikation mit PHP und WebSocket

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 Protokoll für die Vollduplex-Kommunikation über eine einzelne TCP-Verbindung. Anders als beim HTTP-Protokoll können Daten nach dem Herstellen der WebSocket-Verbindung direkt zwischen dem Server und dem Client ausgetauscht werden, ohne dass eine Interaktion über HTTP-Anforderungen und -Antworten erforderlich ist. Dies ermöglicht WebSocket eine Echtzeitkommunikation mit geringer Latenz und hoher Effizienz und eignet sich für Online-Spiele, Chatrooms und andere Szenarien, die eine hohe Parallelität und Echtzeitinteraktion erfordern.

2. Wie PHP WebSocket unterstützt

PHP bietet einige Bibliotheken und Frameworks zur Implementierung von WebSocket, wie z. B. Ratchet, Wrench usw. Diese Bibliotheken und Frameworks werden auf Basis der PHP-Erweiterung Swoole implementiert. Swoole ist ein leistungsstarkes Netzwerkkommunikations-Framework für PHP, das asynchrone E/A, Coroutine und andere Funktionen unterstützt. Es eignet sich zum Aufbau von Webservern mit hoher Parallelität und hoher Leistung Server und andere Anwendungen.

In diesem Artikel verwenden wir die Ratchet-Bibliothek, um WebSocket zu implementieren. Ratchet bietet eine Implementierung des standardbasierten RFC6455-WebSocket-Protokolls und zeichnet sich durch Benutzerfreundlichkeit, Flexibilität und hohe Skalierbarkeit aus. Gleichzeitig unterstützt Ratchet auch WebSockets-Unterprotokolle wie STOMP, WAMP usw. und bietet vollständige Dokumentation und Beispielcode, um Entwicklern einen schnellen Einstieg zu erleichtern.

3. Beispielcode zur Erzielung einer Echtzeitkommunikation

Nachfolgend verwenden wir eine einfache Chatroom-Anwendung, um zu demonstrieren, wie PHP und WebSocket zur Erzielung einer Echtzeitkommunikation verwendet werden.

Ratchet installieren
  1. Installieren Sie Ratchet lokal oder auf der Serverseite. Sie können es über Composer installieren:
composer require cboden/ratchet
Nach dem Login kopieren

Einen WebSocket-Server schreiben
  1. Erstellen Sie eine PHP-Datei server.php mit dem folgenden Code:
<?php
require dirname(__DIR__) . '/vendor/autoload.php';

use RatchetMessageComponentInterface;
use RatchetConnectionInterface;
use RatchetWebSocketMessageComponentTrait;

class Chat implements MessageComponentInterface
{
    use MessageComponentTrait;

    protected $clients;

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

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

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

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

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

$server = new RatchetWebSocketWsServer(new Chat());
$loop = ReactEventLoopFactory::create();
$socket = new ReactSocketServer('0.0.0.0:8080', $loop);
$server = new RatchetServerIoServer($server, $socket, $loop);
echo "Server started
";
$server->run();
Nach dem Login kopieren

Der obige Code erstellt einen einfachen Chatroom-Server, der Port 8080 überwacht und auf Clientverbindungen wartet. Wenn der Client eine Verbindung herstellt, wird die onOpen-Methode aufgerufen und das Client-Verbindungsobjekt in einem ObjectStorage-Objekt gespeichert. Wenn der Client eine Nachricht sendet, wird die Methode onMessage aufgerufen, um die Nachricht an alle mit dem Server verbundenen Clients zu senden. Wenn der Client die Verbindung trennt, wird die Methode onClose aufgerufen, um das Clientverbindungsobjekt aus dem ObjectStorage-Objekt zu löschen.

Schreiben eines WebSocket-Clients
  1. Erstellen Sie eine HTML-Datei client.html mit dem folgenden Code:
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Chat Room</title>
    <style>
        #messages {
            margin-bottom: 10px;
            padding: 5px;
            border: 1px solid #ddd;
            overflow-y: scroll;
            height: 200px;
        }
    </style>
</head>
<body>
    <div>
        <input type="text" id="input-message" placeholder="Write a message...">
        <button id="btn-send">Send</button>
    </div>
    <div id="messages"></div>

    <script>
        var conn = new WebSocket('ws://localhost:8080');
        var messages = document.getElementById('messages');
        var inputMessage = document.getElementById('input-message');
        var btnSend = document.getElementById('btn-send');

        conn.onopen = function(e) {
            messages.innerHTML += '<div>Connected to server</div>'
        };

        conn.onmessage = function(e) {
            messages.innerHTML += '<div>' + e.data + '</div>'
        };

        conn.onerror = function(e) {
            console.log('An error occurred: ' + e.data);
        };

        conn.onclose = function(e) {
            messages.innerHTML += '<div>Connection closed</div>'
        };

        btnSend.onclick = function() {
            if (inputMessage.value) {
                conn.send(inputMessage.value);
                inputMessage.value = '';
            }
        };

        inputMessage.addEventListener('keydown', function(e) {
            if (e.keyCode === 13 && inputMessage.value.trim()) {
                conn.send(inputMessage.value);
                inputMessage.value = '';
            }
        });
    </script>
</body>
</html>
Nach dem Login kopieren

Der obige Code erstellt einen einfachen Chatroom-Client, stellt über WebSocket eine Verbindung mit dem Server her und hört die Nachrichten des Servers ab . Wenn der Benutzer eine Nachricht in das Textfeld eingibt und auf die Schaltfläche „Senden“ klickt oder die Eingabetaste drückt, wird die Nachricht an den Server gesendet und im Chatfenster angezeigt.

Führen Sie den WebSocket-Server und -Client aus.
  1. Starten Sie den WebSocket-Server im Terminal:
php server.php
Nach dem Login kopieren

Öffnen Sie die Clientseite client.html in Ihrem Webbrowser, geben Sie Ihre Nachricht ein und senden Sie sie. Sie werden sehen, dass die Nachricht an den Server gesendet wird , und andere mit dem Server verbundene Clients erhalten dieselbe Nachricht. Auf diese Weise haben wir die Echtzeitkommunikation mithilfe von PHP und WebSocket erfolgreich implementiert.

4. Zusammenfassung

Als effizientes Echtzeit-Kommunikationsprotokoll mit geringer Latenz bietet uns WebSocket eine neue Art der Echtzeit-Interaktion. Gleichzeitig bietet PHP eine Fülle von Bibliotheken und Frameworks zur WebSocket-Unterstützung, die es uns ermöglichen, auf einfache Weise effiziente, schnelle und stabile WebSocket-Anwendungen zu erstellen. Ich hoffe, dieser Artikel kann Ihnen helfen, die WebSocket-Technologie besser zu verstehen und zu nutzen und mehr Echtzeit-Kommunikationsanwendungen zu implementieren.

Das obige ist der detaillierte Inhalt vonSo erreichen Sie Echtzeitkommunikation mit PHP und WebSocket. 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