Avec le développement continu des applications réseau, la programmation réseau à haute concurrence est devenue l'une des technologies importantes dans le développement d'applications réseau d'aujourd'hui. Workerman est un framework de communication réseau hautes performances basé sur PHP. Il fournit une solution complète de programmation réseau, nous permettant de mettre en œuvre plus facilement une programmation réseau à haute concurrence.
Cet article expliquera comment utiliser Workerman pour implémenter une programmation réseau à haute concurrence à travers quelques exemples de code spécifiques.
1. Installer Workerman
Workerman est un package d'extension tiers, nous devons l'installer via composer. Entrez la commande suivante dans le terminal :
composer require workerman/workerman
Une fois l'installation terminée, il y aura un répertoire de fournisseur supplémentaire dans le répertoire racine du projet, qui contient les fichiers liés à Workerman.
2. Créez un serveur TCP simple
Créons un serveur TCP simple, surveillons la demande de lien du client et renvoyons les données envoyées par le client au client. Tout d'abord, créez un fichier server.php dans le répertoire racine du projet avec le contenu suivant :
<?php require_once __DIR__ . '/vendor/autoload.php'; use WorkermanWorker; $server = new Worker('tcp://0.0.0.0:8080'); $server->onConnect = function($connection) { echo "New client connected "; }; $server->onMessage = function($connection, $data) { $connection->send($data); }; $server->onClose = function($connection) { echo "Client closed connection "; }; Worker::runAll();
Dans le code ci-dessus, nous avons créé un nouvel objet Worker pour écouter les demandes de connexion des clients. Lorsque le client se connecte au serveur, la fonction de rappel onConnect est appelée, dans laquelle nous générons un message de connexion réussie. Lorsque le client envoie un message, le serveur appellera la fonction de rappel onMessage et renverra intactes les données envoyées par le client. Lorsque le client se déconnecte, le serveur appelle la fonction de rappel onClose et génère un message de déconnexion. Enfin, nous appelons la fonction Worker::runAll() pour démarrer le serveur.
3. Démarrez le serveur
Entrez le répertoire racine du projet dans le terminal et entrez la commande suivante pour démarrer le serveur :
php server.php start
Après le démarrage, le message d'invite suivant apparaîtra :
Workerman[2022]: Worker starting... Workerman[2022]: Worker started.
Indique que le serveur a été démarré. avec succès.
4. Testez le serveur
Nous pouvons utiliser la commande telnet pour tester le fonctionnement normal du serveur. Entrez la commande suivante dans le terminal :
telnet 127.0.0.1 8080
Une fois la connexion réussie, vous pouvez saisir du contenu et le serveur renverra le contenu saisi intact. Lorsque nous voulons nous déconnecter, nous pouvons entrer Ctrl+] puis quitter pour quitter le client telnet.
5. Utiliser le mode multi-processus
Lorsqu'il y a de nombreuses connexions, le mode mono-processus ne peut plus répondre à la demande. À l'heure actuelle, nous pouvons utiliser le mode multi-processus pour obtenir un traitement à haute concurrence. Voici un exemple de code utilisant le mode multi-processus de Workerman :
<?php require_once __DIR__ . '/vendor/autoload.php'; use WorkermanWorker; $worker = new Worker('tcp://0.0.0.0:8080'); $worker->count = 4; $worker->onWorkerStart = function($worker) { echo "Worker #" . $worker->id . " started "; }; $worker->onConnect = function($connection) { echo "New client connected "; }; $worker->onMessage = function($connection, $data) { $connection->send($data); }; $worker->onClose = function($connection) { echo "Client closed connection "; }; Worker::runAll();
Dans le code ci-dessus, nous avons ajouté la ligne $worker->count = 4;, ce qui signifie que 4 processus sont ouverts pour gérer les demandes des clients en même temps. temps. Nous avons également ajouté une nouvelle fonction de rappel onWorkerStart pour afficher un message au démarrage de chaque processus.
6. Utiliser le protocole UDP
Workerman peut également facilement utiliser le protocole UDP pour la programmation réseau. Voici un exemple de code pour un serveur UDP :
<?php require_once __DIR__ . '/vendor/autoload.php'; use WorkermanWorker; $worker = new Worker('udp://0.0.0.0:8080'); $worker->onMessage = function($connection, $data) { $connection->send($data); }; Worker::runAll();
Parmi eux, nous utilisons udp://0.0.0.0:8080 pour créer un serveur UDP et renvoyer les données reçues intactes au client à la fin de la fonction de rappel onMessage.
Résumé
Cet article présente comment utiliser Workerman pour implémenter une programmation réseau à haute concurrence à travers des exemples de code spécifiques. Du simple serveur TCP au mode multi-processus en passant par le protocole UDP, Workerman fournit des solutions de programmation réseau complètes, ce qui nous facilite la mise en œuvre d'une programmation réseau à haute concurrence.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!