Netzwerkprogrammierung in PHP: von Sockets bis WebSockets

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

Netzwerkprogrammierung in PHP: von Sockets bis WebSockets

\n\n

Wenn wir über PHP sprechen, denken wir zuerst an Webentwicklung: Formularverarbeitung, HTML-Generierung, Datenbankarbeit. Aber PHP kann viel mehr. Haben Sie sich jemals gefragt, dass Ihr PHP-Skript nicht nur ein „Antworter“ auf HTTP-Anfragen sein kann, sondern ein vollwertiger Server, der direkt mit anderen Programmen über Sockets kommuniziert? Das öffnet die Tür zu Chat-Servern, Spiele-Lobbys, Überwachungssystemen und IoT-Geräten.

\n\n

In diesem Artikel nehmen wir die rosarote Brille ab und analysieren die Netzwerkprogrammierung in PHP anhand realer Beispiele. Sie erfahren, was Sockets sind, wie Sie PHP einen Port abhören lassen, wie Sie Daten über TCP und UDP senden und empfangen, und sogar die Magie von WebSockets berühren. Los geht's!

\n\n

Was ist ein Socket und wozu braucht PHP ihn?

\n\n

Ein Socket ist eine programmiersprachliche Schnittstelle für den Datenaustausch zwischen Prozessen, die sowohl auf demselben Rechner als auch auf verschiedenen Computern im Netzwerk laufen können. Stellen Sie sich einen Telefonhörer vor: Sie haben eine Nummer (IP-Adresse) und einen Port (Durchwahl). Sie heben den Hörer ab (erstellen einen Socket), wählen die Nummer (verbinden sich) und sprechen (übertragen Daten).

\n\n

In PHP werden Sockets über die Erweiterung sockets implementiert. Normalerweise ist sie standardmäßig deaktiviert, aber sie lässt sich leicht aktivieren. Netzwerkprogrammierung in PHP ermöglicht die Erstellung von:

\n\n
    \n
  • TCP-Servern und -Clients (z. B. für Chats oder den Datenaustausch mit anderen Diensten).
  • \n
  • UDP-Anwendungen (Streaming, Überwachung, bei denen Paketverluste nicht kritisch sind).
  • \n
  • WebSocket-Servern (für Echtzeitanwendungen im Browser).
  • \n
\n\n

Der Hauptvorteil ist, dass Sie in der vertrauten PHP-Umgebung bleiben, ohne auf C, Java oder Node.js umsteigen zu müssen. Für hochlastige Systeme ist PHP natürlich nicht ideal (aufgrund der Einzelthread-Architektur), aber für Prototypen, interne Werkzeuge oder geringe Lasten ist es genau richtig.

\n\n

Erstellen eines TCP-Servers in PHP

\n\n

Beginnen wir mit der Klassik: einem TCP-Server, der Verbindungen annimmt und eine Begrüßung sendet. Dies ist die Grundlage jeder php Socket-Anwendung.

\n\n

Schritt 1: Socket erstellen

\n

Die Funktion socket_create() ist der erste Schritt. Sie akzeptiert drei Parameter: die Protokollfamilie (AF_INET für IPv4), den Socket-Typ (SOCK_STREAM für TCP) und das Protokoll (0 – das System wählt aus).

\n\n
<?php\n// TCP-Socket erstellen\n$socket = socket_create(AF_INET, SOCK_STREAM, 0);\nif ($socket === false) {\n    echo "Fehler beim Erstellen des Sockets: " . socket_strerror(socket_last_error()) . "\\n";\n    exit;\n}\necho "Socket erfolgreich erstellt.\\n";\n?>
\n\n

Schritt 2: Binden an Adresse und Port

\n

Wir verwenden socket_bind(). Geben Sie die IP-Adresse (0.0.0.0 – wir hören alle Schnittstellen ab) und den Port (z. B. 8080) an.

\n\n
<?php\n$address = '0.0.0.0';\n$port = 8080;\n\nif (socket_bind($socket, $address, $port) === false) {\n    echo "Fehler beim Binden: " . socket_strerror(socket_last_error($socket)) . "\\n";\n    exit;\n}\necho "Socket an $address:$port gebunden\\n";\n?>
\n\n

Schritt 3: Eingehende Verbindungen abhören

\n

Versetzen Sie den Socket mit socket_listen() in den Abhörmodus. Der zweite Parameter ist die maximale Länge der Verbindungswarteschlange.

\n\n
<?php\nif (socket_listen($socket, 5) === false) {\n    echo "Fehler beim Abhören: " . socket_strerror(socket_last_error($socket)) . "\\n";\n    exit;\n}\necho "Server gestartet, warte auf Verbindungen...\\n";\n?>
\n\n

Schritt 4: Client annehmen

\n

Die blockierende Funktion socket_accept(). Sie wartet, bis sich jemand verbindet, und gibt einen neuen Socket für die Kommunikation mit diesem Client zurück.

\n\n
<?php\nwhile (true) {\n    $client = socket_accept($socket);\n    if ($client === false) {\n        echo "Fehler beim Annehmen der Verbindung: " . socket_strerror(socket_last_error($socket)) . "\\n";\n        break;\n    }\n\n    echo "Neuer Client hat sich verbunden.\\n";\n\n    // Ab                

Blogs

Buchempfehlungen