Indizierung von Strings in Rust: 5 fatale Fehler und wie man sie vermeidet

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

WebSockets in PHP: Wie Sie Ihre Website zum Echtzeit-Sprechen Bringen

\n\n

Stellen Sie sich eine normale Website vor. Sie klicken auf einen Button – und warten, bis die Seite neu lädt. Es ist wie das Verschicken eines Briefes: Sie werfen ihn in den Briefkasten und hoffen, dass er ankommt. Stellen Sie sich nun vor, Sie telefonieren – Sie hören die andere Person sofort. WebSockets sind genau dieses "Telefon" für das Web. Und ja, es funktioniert mit PHP.

\n\n

Viele denken, WebSocket sei nur für Node.js oder Python. Aber PHP, obwohl ursprünglich zum "Verkleben" von HTML entwickelt, ist längst über seinen ursprünglichen Rahmen hinausgewachsen. Heute schauen wir uns an, wie man eine Echtzeit-Anwendung in PHP erstellt – sei es ein Chat, ein Benachrichtigungsfeed oder Live-Analysen. Und das ohne Krücken.

\n\n

Wenn Sie jemals versucht haben, einen Live-Chat in PHP mit Long Polling zu erstellen und dabei zusehen mussten, wie Ihr Server unter 1000 Anfragen pro Sekunde zusammenbricht – dieser Artikel ist für Sie. WebSockets ändern das Spiel.

\n\n

Was ist WebSocket und warum versteht sich PHP damit?

\n\n

WebSocket ist ein bidirektionaler Kommunikationskanal zwischen Browser und Server. Im Gegensatz zu HTTP, bei dem der Client immer die Anfrage initiiert, kann der Server hier eigenständig Daten an den Client senden. Das bietet echte Echtzeit, nicht nur eine Imitation.

\n\n

Der entscheidende Unterschied zum Long Polling (bei dem der Client ständig fragt "gibt es was Neues?") ist, dass die Verbindung bei WebSocket offen bleibt. Sie stellen sie einmal her – und kommunizieren ohne Unterbrechung. Die Einsparungen an Traffic und Ressourcen sind enorm.

\n\n

PHP als Sprache führt Skripte sequentiell aus. Das hindert es aber nicht daran, ein hervorragender Server für WebSocket zu sein. Das Geheimnis liegt in der Architektur: Wir lassen PHP nicht über einen Webserver (Apache/Nginx) für jede Verbindung laufen, sondern nutzen es als eigenständigen Daemon. Und hier kommen Bibliotheken ins Spiel.

\n\n

Bibliotheken für WebSocket in PHP: Was wählen?

\n\n

Es gibt zwei sehr beliebte Bibliotheken – und beide verdienen Aufmerksamkeit:

\n\n
    \n
  • Ratchet – der Urvater der PHP-WebSockets. Zuverlässig, bewährt, aber etwas "old-school". Es verwendet ein ereignisgesteuertes Modell basierend auf ReactPHP. Ideal für einfache Chats und Benachrichtigungen.
  • \n
  • Swoole – ein Biest. Dies ist nicht nur eine Bibliothek, sondern eine ganze Engine, die den PHP-Kern umschreibt. Es bietet Asynchronität, Coroutinen und eine Leistung nahe an Go. Erfordert jedoch die Installation einer Erweiterung auf dem Server.
  • \n
\n\n

Für den ersten Einstieg empfehle ich Ratchet – es ist einfacher zu erlernen und erfordert keine Bearbeitung der php.ini. Außerdem funktioniert es hervorragend in Kombination mit ReactPHP, das wir heute ebenfalls ansprechen werden.

\n\n

Einen einfachen WebSocket-Server in PHP mit Ratchet schreiben

\n\n

Erstellen wir einen einfachen Echo-Server. Er empfängt Nachrichten vom Client und sendet sie zurück. Das ist das klassische "Hallo Welt" für WebSocket.

\n\n

Installieren Sie zuerst Ratchet über Composer. Öffnen Sie ein Terminal im Projektverzeichnis:

\n\n
composer require cboden/ratchet
\n\n

Erstellen Sie nun eine Datei server.php:

\n\n
<?php\nrequire __DIR__ . '/vendor/autoload.php';\n\nuse Ratchet\\MessageComponentInterface;\nuse Ratchet\\ConnectionInterface;\n\nclass EchoServer implements MessageComponentInterface {\n    public function onOpen(ConnectionInterface $conn) {\n        echo "Neue Verbindung: {$conn->resourceId}\\n";\n    }\n\n    public function onMessage(ConnectionInterface $from, $msg) {\n        echo "Empfangen: {$msg}\\n";\n        $from->send("Echo: {$msg}");\n    }\n\n    public function onClose(ConnectionInterface $conn) {\n        echo "Verbindung {$conn->resourceId} geschlossen\\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 starten\nuse Ratchet\\Server\\IoServer;\nuse Ratchet\\Http\\HttpServer;\nuse Ratchet\\WebSocket\\WsServer;\n                

Blogs

Buchempfehlungen