Einführung in WebSocket mit PHP: Von der Theorie zur Praxis
Moderne Webanwendungen erfordern zunehmend eine sofortige Datenübertragung zwischen Client und Server. Der traditionelle HTTP-Anfrage-Antwort-Zyklus, der auf Long Polling oder periodischen AJAX-Anfragen basiert, wird den Echtzeitanforderungen nicht mehr gerecht. Hier kommt das WebSocket-Protokoll zur Hilfe – eine Technologie, die eine permanente bidirektionale Verbindung zwischen Browser und Server ermöglicht.
In diesem Artikel werden wir uns ansehen, wie man Real-Time-Anwendungen mit PHP unter Verwendung von WebSocket erstellt. Sie erfahren, wie Sie die Server-Bibliothek Ratchet installieren, einen einfachen Chat und ein Benachrichtigungssystem schreiben und welche Fallstricke auf Sie warten. Das Material richtet sich an Entwickler, die mit den Grundlagen von PHP und JavaScript vertraut sind.
Was ist WebSocket und warum ist es für PHP wichtig?
WebSocket ist ein Protokoll, das über TCP arbeitet. Es wird als HTTP-Anfrage (Handshake) initiiert, wonach die Verbindung zu einem vollwertigen bidirektionalen Kanal „upgegradet“ wird. Im Gegensatz zu HTTP:
- Kann der Server Daten an den Client senden, ohne dass eine vorherige Anfrage erforderlich ist.
- Bleibt die Verbindung offen, was Ressourcen für wiederholte Handshakes spart.
- Ist die Datenübertragungsverzögerung minimal – Millisekunden gegenüber Sekunden beim Long Polling.
PHP galt traditionell als eine Sprache, die aufgrund ihres „Eine Anfrage – Ein Prozess“-Modells nicht für Echtzeitaufgaben geeignet ist. Moderne Bibliotheken wie Ratchet und ReactPHP ermöglichen es jedoch, langlebige PHP-Prozesse zu starten, die als unabhängige WebSocket-Server arbeiten. Dies eröffnet Möglichkeiten für:
- Online-Chats und Messenger.
- Benachrichtigungssysteme (neue E-Mails, Bestellungen, Alarme).
- Gemeinsame Dokumentenbearbeitung.
- Spiele und Handelsplattformen.
Installation und Konfiguration eines WebSocket-Servers mit PHP und Ratchet
Für die Arbeit mit WebSocket in PHP verwenden wir die Bibliothek Ratchet (basierend auf ReactPHP). Die Installation erfolgt über Composer.
Schritt 1: Projekt erstellen und Abhängigkeiten installieren
mkdir websocket-phpcd websocket-phpcomposer require cboden/ratchetNach der Installation erscheinen Ratchet und ReactPHP im Ordner vendor.
Schritt 2: WebSocket-Server-Klasse erstellen
Erstellen Sie die Datei server.php:
<?phpuse Ratchet\\MessageComponentInterface;use Ratchet\\ConnectionInterface;
class ChatServer 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(); }}Schritt 3: Server starten
Fügen Sie in server.php den Startcode hinzu:
use Ratchet\\Server\\IoServer;use Ratchet\\Http\\HttpServer;use Ratchet\\WebSocket\\WsServer;
require __DIR__ . '/vendor/autoload.php';
$server = IoServer::factory( new HttpServer( new WsServer( new ChatServer() ) ), 8080);
echo "WebSocket-Server gestartet auf Port 8080";$se