Maison  >  Article  >  cadre php  >  Comment utiliser Workerman pour implémenter une programmation réseau à haute concurrence

Comment utiliser Workerman pour implémenter une programmation réseau à haute concurrence

PHPz
PHPzoriginal
2023-11-07 09:05:18999parcourir

Comment utiliser Workerman pour implémenter une programmation réseau à haute concurrence

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn