Programmation réseau en PHP : des sockets aux WebSockets

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Programmation réseau en PHP : des sockets aux WebSockets

\n\n

Quand on parle de PHP, la première chose qui vient à l'esprit est le développement web : traitement de formulaires, génération de HTML, travail avec des bases de données. Mais PHP est bien plus que cela. Avez-vous déjà imaginé que votre script PHP pourrait devenir non seulement un « répondeur » aux requêtes HTTP, mais un serveur à part entière qui communique directement avec d'autres programmes via des sockets ? Cela ouvre la porte au monde des serveurs de chat, des lobbies de jeux, des systèmes de surveillance et des appareils IoT.

\n\n

Dans cet article, nous allons enlever les œillères et analyser la programmation réseau en PHP avec des exemples concrets. Vous apprendrez ce qu'est un socket, comment faire écouter un port à PHP, comment envoyer et recevoir des données via TCP et UDP, et même toucher à la magie des WebSockets. C'est parti !

\n\n

Qu'est-ce qu'un socket et pourquoi en PHP ?

\n\n

Un socket est une interface logicielle pour échanger des données entre des processus, qui peuvent être exécutés sur une même machine ou sur différents ordinateurs en réseau. Imaginez un combiné téléphonique : vous avez un numéro (adresse IP) et un port (poste). Vous décrochez (créez un socket), composez le numéro (vous connectez) et parlez (transmettez des données).

\n\n

En PHP, les sockets sont implémentés via l'extension sockets. Elle est généralement désactivée par défaut, mais il est facile de l'activer. La programmation réseau en PHP permet de créer :

\n\n
    \n
  • Des serveurs et clients TCP (par exemple, pour un chat ou un échange de données avec un autre service).
  • \n
  • Des applications UDP (streaming, surveillance, où la perte de paquets n'est pas critique).
  • \n
  • Des serveurs WebSocket (pour des applications en temps réel dans le navigateur).
  • \n
\n\n

Le principal avantage est que vous restez dans l'environnement familier de PHP, sans passer à C, Java ou Node.js. Bien sûr, pour les systèmes à forte charge, PHP n'est pas idéal (à cause du monothread), mais pour les prototypes, les outils internes ou les charges faibles, c'est parfait.

\n\n

Création d'un serveur TCP en PHP

\n\n

Commençons par un classique : un serveur TCP qui accepte les connexions et envoie un message de bienvenue. C'est la base de toute application php socket.

\n\n

Étape 1. Création du socket

\n

La fonction socket_create() est la première étape. Elle prend trois paramètres : la famille de protocoles (AF_INET pour IPv4), le type de socket (SOCK_STREAM pour TCP) et le protocole (0 — laisse le système choisir).

\n\n
<?php\n// Création d'un socket TCP\n$socket = socket_create(AF_INET, SOCK_STREAM, 0);\nif ($socket === false) {\n    echo "Erreur de création du socket : " . socket_strerror(socket_last_error()) . "\\n";\n    exit;\n}\necho "Socket créé avec succès.\\n";\n?>
\n\n

Étape 2. Liaison à l'adresse et au port

\n

Utilisez socket_bind(). Spécifiez l'adresse IP (0.0.0.0 — écoute sur toutes les interfaces) et le port (par exemple, 8080).

\n\n
<?php\n$address = '0.0.0.0';\n$port = 8080;\n\nif (socket_bind($socket, $address, $port) === false) {\n    echo "Erreur de liaison : " . socket_strerror(socket_last_error($socket)) . "\\n";\n    exit;\n}\necho "Socket lié à $address:$port\\n";\n?>
\n\n

Étape 3. Écoute des connexions entrantes

\n

Passez le socket en mode écoute avec socket_listen(). Le deuxième paramètre est la longueur maximale de la file d'attente des connexions.

\n\n
<?php\nif (socket_listen($socket, 5) === false) {\n    echo "Erreur d'écoute : " . socket_strerror(socket_last_error($socket)) . "\\n";\n    exit;\n}\necho "Serveur démarré, en attente de connexions...\\n";\n?>
\n\n

Étape 4. Acceptation du client

\n

La fonction bloquante socket_accept(). Elle attend que quelqu'un se connecte et retourne un nouveau socket pour communiquer avec ce client.

\n\n
<?php\nwhile (true) {\n    $client = socket_accept($socket);\n    if ($client === false) {\n        echo "Erreur d'acceptation de la connexion : " . socket_strerror(socket_last_error($socket)) . "\\n";\n        break;\n    }\n\n    echo "Nouveau client connecté.\\n";\n\n    // En                

Blogs

Book Recommendations