WebSocket-Bibliothek Ratchet für PHP: Echtzeit-Anwendungen auf der Website

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Was ist WebSocket und wozu braucht man die Bibliothek Ratchet für PHP?

WebSocket ist ein Protokoll, das eine dauerhafte bidirektionale Verbindung zwischen Client (Browser) und Server ermöglicht. Im Gegensatz zum klassischen HTTP, bei dem Anfragen nur vom Client initiiert werden, erlaubt WebSocket dem Server, Daten sofort zu senden, ohne auf eine Anfrage zu warten. Dies ist die ideale Lösung für Chats, Echtzeit-Benachrichtigungen, Online-Spiele, Tracker und alle Anwendungen, bei denen geringe Latenz wichtig ist.

Standard-PHP hat keine integrierte Unterstützung für WebSocket, aber die Bibliothek Ratchet (die die Komponente ReactPHP verwendet) schließt diese Lücke. Ratchet ist eine asynchrone Bibliothek, die es ermöglicht, einen WebSocket-Server direkt aus PHP heraus zu starten und dabei viele Verbindungen gleichzeitig ohne Blockierung zu verarbeiten.



Hauptfunktionen von Ratchet

  • Asynchronität – basierend auf ReactPHP, blockiert den Thread nicht beim Warten auf Daten.
  • Protokollunterstützung – WebSocket (RFC 6455) sowie HTTP-Komponenten (für hybride Anwendungen).
  • Einfachheit – minimaler Code zum Starten des Servers.
  • Skalierbarkeit – kann mit ZeroMQ oder Redis für den Clusterbetrieb kombiniert werden.
  • Kompatibilität – funktioniert mit allen modernen Browsern über das integrierte WebSocket-Objekt.


Installation von Ratchet

Die Installation erfolgt über Composer. Öffnen Sie ein Terminal im Stammverzeichnis des Projekts und führen Sie Folgendes aus:

composer require cboden/ratchet

Nach der Installation erscheinen im Ordner vendor alle Abhängigkeiten, einschließlich ReactPHP.



Erstellen eines einfachen WebSocket-Servers mit Ratchet

Erstellen wir eine Datei server.php:

<?phprequire 'vendor/autoload.php';

use Ratchet\\MessageComponentInterface;use Ratchet\\ConnectionInterface;use Ratchet\\Server\\IoServer;use Ratchet\\Http\\HttpServer;use Ratchet\\WebSocket\\WsServer;

class Chat implements MessageComponentInterface { protected $clients;

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

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

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

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

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

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

echo "Server läuft auf Port 8080";$server->run();


Erklärung des Codes

  • Chat – Klasse, die MessageComponentInterface implementiert. In onOpen speichern wir die Verbindung, in onMessage senden wir die Nachricht an alle außer dem Absender.
  • IoServer::factory – erstellt einen Server basierend auf ReactPHP. Wir umschließen unsere Komponente mit WsServer (für WebSocket) und HttpServer (für Kompatibilität mit HTTP-Anfragen).
  • Der Server hört auf Port 8080. Starten Sie ihn mit dem Befehl: php server.php.


Clientseite (JavaScript)

Erstellen Sie eine HTML-Datei client.html:

<!DOCTYPE html><html><head>    <title>WebSocket-Chat</title>    <script>        const ws = new WebSocket('ws://localhost:8080');

Empfehlungen