WebSockets in PHP: Echtzeit-Anwendungen erstellen ohne Magie
\n\nHast du dich jemals gefragt, warum Benachrichtigungen in modernen Webanwendungen sofort ankommen und Chats ohne ständiges Drücken von F5 funktionieren? Das Geheimnis sind WebSockets. Und ja, PHP kann auch Echtzeit. In diesem Artikel schauen wir uns an, wie man PHP mit WebSockets verbindet, einen Live-Chat und Benachrichtigungen erstellt – und das ohne Schmerz und überflüssige Bibliotheken.
\n\nWenn du es gewohnt bist, dass PHP nur "Anfrage-Antwort" kann, mach dich auf eine Überraschung gefasst. Mit WebSockets in PHP kannst du vollwertige Echtzeit-Anwendungen erstellen: von einem einfachen Chat bis zu einem Multiplayer-Spiel. Und das alles in deiner Lieblingssprache.
\n\nWas sind WebSockets und warum braucht PHP sie?
\n\nWebSocket ist ein Protokoll für die bidirektionale Kommunikation zwischen Client und Server. Im Gegensatz zu herkömmlichem HTTP, bei dem der Client den Server ständig fragt "Na, gibt es Neuigkeiten?", hält WebSocket die Verbindung offen. Der Server sendet dem Client Daten, sobald sie verfügbar sind.
\n\nFür PHP ist das ein echter Durchbruch. Früher war Echtzeit das Terrain von Node.js oder Python mit asyncio. Aber heute sind Echtzeit-Anwendungen mit PHP Realität. Dank Bibliotheken wie Ratchet und Swoole kann PHP als langlebiger Prozess arbeiten und Tausende gleichzeitige Verbindungen verwalten.
\n\nWo wird das eingesetzt?
\n- \n
- Chats und Messenger; \n
- Benachrichtigungssysteme (neue Bestellungen, Nachrichten); \n
- Gemeinsame Dokumentenbearbeitung; \n
- Online-Spiele und Quizze; \n
- Echtzeit-Monitoring und Dashboards. \n
Vorbereitung: Was du für den Start brauchst
\n\nFür die Arbeit mit einem WebSocket-Server in PHP benötigen wir:
\n- \n
- PHP 7.4 oder höher (besser 8.x); \n
- Composer – der Paketmanager; \n
- Die Bibliothek Ratchet (oder Swoole für die Produktion); \n
- Grundlegendes Verständnis von OOP und der Arbeit mit der Konsole. \n
Installiere Ratchet über Composer:
\ncomposer require cboden/ratchet\n\nNach der Installation hast du einen vendor-Ordner und eine composer.json-Datei. Alles bereit für deine erste Echtzeit-Anwendung in PHP.
\n\nEinen einfachen WebSocket-Server in PHP schreiben
\n\nErstelle eine Datei server.php. Das wird unser WebSocket-Server PHP, der Verbindungen annimmt und Nachrichten an alle verbundenen Clients sendet.
<?php\nuse Ratchet\\Server\\IoServer;\nuse Ratchet\\Http\\HttpServer;\nuse Ratchet\\WebSocket\\WsServer;\nuse Ratchet\\MessageComponentInterface;\nuse Ratchet\\ConnectionInterface;\n\nrequire __DIR__ . '/vendor/autoload.php';\n\nclass Chat implements MessageComponentInterface {\n protected $clients;\n\n public function __construct() {\n $this->clients = new \\SplObjectStorage;\n echo "Server gestartet!\\n";\n }\n\n public function onOpen(ConnectionInterface $conn) {\n $this->clients->attach($conn);\n echo "Neue Verbindung: {$conn->resourceId}\\n";\n }\n\n public function onMessage(ConnectionInterface $from, $msg) {\n foreach ($this->clients as $client) {\n if ($from !== $client) {\n $client->send($msg);\n }\n }\n echo "Nachricht von {$from->resourceId}: $msg\\n";\n }\n\n public function onClose(ConnectionInterface $conn) {\n $this->clients->detach($conn);\n echo "Verbindung geschlossen: {$conn->resourceId}\\n";\n }\n\n public function onError(ConnectionInterface $conn, \\Exception $e) {\n echo "Fehler: {$e->getMessage()}\\n";\n $conn->close();\n }\n}\n\n$server = IoServer::factory(\n new HttpServer(\n new WsServer(\n new Chat()\n )\n ),\n 8080\n);\n\n$server->run();\n\nStarte den Server in der Konsole:
\nphp server.php\n\nFertig! Der Server lauscht auf Port 8080 und ist bereit, WebSocket-Verbindungen anzunehmen. Jetzt