Aktueller Standort: Startseite> Neueste Artikel> So erstellen Sie im PHP -CLI -Modus einen Dienst mit Socket_accept () im PHP -CLI -Modus

So erstellen Sie im PHP -CLI -Modus einen Dienst mit Socket_accept () im PHP -CLI -Modus

M66 2025-05-18

Im CLI-Modus von PHP (Befehlszeilenschnittstellen) kann die Funktion socKet_accept () verwendet werden, um Netzwerkverbindungen auf niedriger Ebene zu verarbeiten. Auf diese Weise können wir einen einfachen TCP -Server mit PHP erstellen, um Clientanforderungen zu akzeptieren und Antworten zu senden. Während PHP nicht die bevorzugte Sprache für den Aufbau von Webdiensten im traditionellen Sinne ist, bietet es genügend zugrunde liegende APIs, damit wir leicht experimentieren oder leichte Dienste erstellen können.

Grundkonzepte

Vor der Einrichtung eines Netzwerkdienstes müssen Sie die folgenden PHP -Socket -Funktionen verstehen:

  • socket_create () : Erstellen Sie eine Socket -Ressource.

  • Socket_Bind () : Bindet den Socket an die IP -Adresse und den Port.

  • SOCKKET_LISTEN () : Hören Sie sich eingehende Verbindungen an.

  • socket_accept () : Akzeptiert die Verbindungsanforderung.

  • Socket_read () / socket_write () : Wird zum Empfangen und Senden von Daten verwendet.

  • SOCKKET_CLOSE () : Schließen Sie die Verbindung.

Beispiel: Erstellen Sie einen einfachen TCP -Server

Hier ist ein Beispiel für einen einfachen PHP -TCP -Server, der mit Socket_accept () erstellt wurde.

 <?php
$host = "0.0.0.0";
$port = 9000;

// Erstellen Sie eine Steckdose
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($sock === false) {
    die("socket_create() failed: " . socket_strerror(socket_last_error()) . "\n");
}

// An Adresse und Port binden
if (!socket_bind($sock, $host, $port)) {
    die("socket_bind() failed: " . socket_strerror(socket_last_error($sock)) . "\n");
}

// Beginnen Sie mit der Überwachung
if (!socket_listen($sock, 5)) {
    die("socket_listen() failed: " . socket_strerror(socket_last_error($sock)) . "\n");
}

echo "Der Server wird gestartet,Hören Sie sich Port an $port...\n";

while (true) {
    // Eine Verbindung akzeptieren
    $client = socket_accept($sock);
    if ($client === false) {
        echo "socket_accept() failed: " . socket_strerror(socket_last_error($sock)) . "\n";
        continue;
    }

    // Kundenanforderung lesen
    $input = socket_read($client, 1024);
    echo "Erhielt eine Anfrage:" . trim($input) . "\n";

    // Konstruieren Sie den Antwortinhalt
    $response = "Willkommen zu Besuch m66.net Testdienste!Was Sie gesendet haben, ist:$input\n";

    // Schreiben Sie an den Kunden zurück
    socket_write($client, $response, strlen($response));

    // Client -Verbindung schließen
    socket_close($client);
}

// Schließen Sie den Hauptbuchse(Theoretisch wird es hier niemals ausgeführt werden)
socket_close($sock);

Betriebsmodus

Speichern Sie den obigen Code als Server.php und führen Sie ihn über die Befehlszeile aus:

 php server.php

Dieses Skript hört Port 9000 an und wartet, bis der Client eine Verbindung herstellt. Sie können Telnet oder andere TCP -Client -Tools verwenden, um eine Verbindung zum Server herzustellen:

 telnet 127.0.0.1 9000

Nach dem Eingeben eines Textes und Drückens spiegelt der Server den Text mit einer Begrüßungsnachricht wider.

Dinge zu beachten

  • Bitte stellen Sie sicher, dass PHP die Sockets -Erweiterung aktiviert hat (kann über PHP -M überprüft werden).

  • Der Dienst ist ein einzelner Thread und kann jeweils nur eine Verbindung verarbeiten. Wenn mehrere Verbindungen gleichzeitig verarbeitet werden müssen, können Sie PCNTL_FORK () oder professionelle Dienste wie SWOOLE verwenden.

  • Verwenden Sie keine so einfache Implementierung in Produktionsumgebungen, da sie keine Sicherheits- und Fehlertoleranz hat.

Anwendungsszenarien

Obwohl PHP nicht die Hauptsprache für die Entwicklung von Netzwerkdiensten ist, können solche Socket -Dienste verwendet werden für:

  • Einfaches Debugging -Tool

  • LAN -Datenübertragungs- und Empfangsdienste

  • Prototyping von benutzerdefinierten Protokollen

  • Datenaustausch mit Nicht-Web-Systemen (z. B. Hardware-Geräte)