Position actuelle: Accueil> Derniers articles> Comment créer un service à l'aide de socket_accept () en mode CLI PHP

Comment créer un service à l'aide de socket_accept () en mode CLI PHP

M66 2025-05-18

En mode CLI (interface de ligne de commande) de PHP, la fonction socket_accept () peut être utilisée pour gérer les connexions réseau de bas niveau. Cela nous permet de créer un serveur TCP simple à l'aide de PHP pour accepter les demandes du client et d'envoyer des réponses. Bien que PHP ne soit pas le langage préféré pour créer des services Web au sens traditionnel, il fournit suffisamment d'API sous-jacents pour nous permettre d'expérimenter ou de créer facilement des services légers.

Concepts de base

Avant d'établir un service réseau, vous devez comprendre les fonctions de socket PHP suivantes:

Exemple: créez un serveur TCP simple

Voici un exemple d'un simple serveur PHP TCP construit à l'aide de socket_accept () .

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

// Créer une douille
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($sock === false) {
    die("socket_create() failed: " . socket_strerror(socket_last_error()) . "\n");
}

// Lier à l&#39;adresse et au port
if (!socket_bind($sock, $host, $port)) {
    die("socket_bind() failed: " . socket_strerror(socket_last_error($sock)) . "\n");
}

// Commencer à surveiller
if (!socket_listen($sock, 5)) {
    die("socket_listen() failed: " . socket_strerror(socket_last_error($sock)) . "\n");
}

echo "Le serveur est démarré,Écouter le port $port...\n";

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

    // Lire la demande du client
    $input = socket_read($client, 1024);
    echo "Reçu une demande:" . trim($input) . "\n";

    // Construisez le contenu de réponse
    $response = "Bienvenue à visiter m66.net Services de test!Ce que vous avez envoyé est:$input\n";

    // Rédiger au client
    socket_write($client, $response, strlen($response));

    // Fermer la connexion du client
    socket_close($client);
}

// Fermez la prise principale(En théorie, il ne sera jamais exécuté ici)
socket_close($sock);

Mode de fonctionnement

Enregistrez le code ci-dessus sous server.php et exécutez-le via la ligne de commande:

 php server.php

Ce script écoutera le port 9000 et attendra que le client se connecte. Vous pouvez utiliser Telnet ou d'autres outils clients TCP pour vous connecter au serveur:

 telnet 127.0.0.1 9000

Après avoir saisi n'importe quel texte et appuyé sur, le serveur fait écho au texte avec un message de bienvenue.

Choses à noter

  • Veuillez vous assurer que PHP a une extension de sockets activée (peut être vérifiée via PHP -M ).

  • Le service est unique et ne peut traiter qu'une seule connexion à la fois. Si plusieurs connexions doivent être traitées simultanément, vous pouvez utiliser pcntl_fork () ou utiliser plus de services professionnels tels que Swoole.

  • N'utilisez pas une implémentation aussi simple dans les environnements de production, car il n'a pas de sécurité et de tolérance aux pannes.

Scénarios d'application

Bien que PHP ne soit pas la langue principale du développement de services réseau, ces services de socket peuvent être utilisés pour:

  • Outil de débogage simple

  • Services de transmission et de réception de données LAN

  • Prototypage des protocoles personnalisés

  • Échange de données avec des systèmes non Web (tels que les appareils matériels)