Comment utiliser Workerman pour implémenter le serveur WebSocket
Avec la popularité croissante de la technologie WebRTC, de la communication en temps réel dans les jeux, du chat en ligne et d'autres applications, la technologie WebSocket est devenue de plus en plus importante. Workerman est un framework réseau TCP, UDP et Unix Socket asynchrone hautes performances fonctionnant dans un environnement PHP. Il prend intrinsèquement en charge une concurrence élevée et convient parfaitement au développement de serveurs WebSocket.
Cet article présentera en détail comment utiliser Workerman pour implémenter un serveur WebSocket, notamment comment gérer les connexions WebSocket, comment envoyer et recevoir des messages WebSocket et comment intégrer le framework avec d'autres bibliothèques. Un exemple de code complet est également fourni à la fin de l’article.
Avant de commencer à utiliser Workerman, vous devez d'abord l'installer. Vous pouvez l'installer via Composer ou télécharger le code source directement depuis GitHub et l'installer manuellement. Ici, nous prenons comme exemple l'installation de Composer :
composer require workerman/workerman
Avant d'utiliser Workerman pour implémenter le serveur WebSocket, vous devez d'abord comprendre comment fonctionne le protocole WebSocket. WebSocket est un protocole de connexion longue durée en duplex intégral. Le client et le serveur établissent une connexion via une poignée de main, puis peuvent s'envoyer des messages. Les messages WebSocket peuvent contenir n'importe quelle donnée telle que du texte, des binaires ou même des fichiers, et le serveur peut les traiter différemment selon le type de message.
La mise en œuvre d'un serveur WebSocket à l'aide de Workerman est très simple et ne nécessite que quelques lignes de code. Voici un exemple :
require_once __DIR__ . '/vendor/autoload.php'; use WorkermanWorker; // 创建一个Worker监听8090端口,使用websocket协议通讯 $wsWorker = new Worker("websocket://0.0.0.0:8090"); // 启动4个进程对外提供服务 $wsWorker->count = 4; // 处理WebSocket连接的回调函数 $wsWorker->onConnect = function($connection) { echo "New connection "; }; // 处理WebSocket消息的回调函数 $wsWorker->onMessage = function($connection, $data) { // 处理消息... }; // 启动Worker Worker::runAll();
Tout d'abord, nous créons une instance Worker et la spécifions pour écouter sur le port 8090 et communiquer en utilisant le protocole websocket. Configurez ensuite 4 processus pour commencer à gérer un grand nombre de connexions simultanées. Worker prend en charge plusieurs protocoles de transmission tels que TCP, UDP et Unix Socket, nous devons donc spécifier le protocole WebSocket.
Dans cet exemple, nous définissons uniquement deux fonctions de rappel :
Grâce à la fonction de rappel onMessage, nous pouvons recevoir le message WebSocket envoyé par le client. Le format des données peut être texte ou binaire. La manière de traiter les messages WebSocket dépend du scénario d'application. Par exemple, les applications de chat en ligne peuvent avoir besoin d'implémenter des fonctions telles que la diffusion et le chat point à point, tandis que les applications de jeu doivent implémenter une communication en temps réel au niveau de la microseconde.
Voici un exemple simple qui imprime le message reçu et répond au client :
$wsWorker->onMessage = function($connection, $data) { echo "Received message: {$data} "; $connection->send("Received: {$data}"); };
Statut de la connexion WebSocket
Une fois la connexion WebSocket établie, la connexion entre le client et le serveur restera ouverte. Grâce à la fonction de rappel onClose, nous pouvons gérer l'événement de déconnexion :
$wsWorker->onClose = function($connection) { echo "Connection closed "; };
Workerman peut être facilement intégré à d'autres frameworks. Ici, nous prenons le framework Laravel comme exemple pour présenter comment utiliser Workerman pour implémenter un serveur WebSocket dans Laravel.
Tout d'abord, nous devons installer Workerman dans notre projet Laravel :
composer require workerman/workerman
Ensuite, nous pouvons créer une commande Artisan personnalisée pour démarrer le serveur WebSocket :
php artisan make:command WebSocketServer
Ensuite, écrivez le code dans le fichier app/Console/Commands/WebSocketServer.php file :
<?php namespace AppConsoleCommands; use IlluminateConsoleCommand; use WorkermanWorker; class WebSocketServer extends Command { // 命令名称 protected $name = 'websocket:server'; // 命令描述 protected $description = 'Start WebSocket server'; // 执行命令 public function handle() { // 创建Worker实例,监听8080端口 $wsWorker = new Worker("websocket://0.0.0.0:8080"); // 进程数量 $wsWorker->count = 4; // 处理连接事件 $wsWorker->onConnect = function($connection) { echo "New connection "; }; // 处理消息事件 $wsWorker->onMessage = function($connection, $data) { // 处理消息 }; // 运行Worker Worker::runAll(); } }
Enfin, nous pouvons démarrer le serveur WebSocket avec la commande suivante :
php artisan websocket:server
Comme vous pouvez le constater, implémenter un serveur WebSocket à l'aide de Workerman est très simple et peut être facilement intégré à d'autres frameworks.
Ce qui suit est un exemple complet de serveur WebSocket, qui peut recevoir des messages envoyés par le client, effectuer un traitement simple et répondre aux résultats du traitement au client :
count = 4; // 处理WebSocket连接的回调函数 $wsWorker->onConnect = function($connection) { echo "New connection "; }; // 处理WebSocket消息的回调函数 $wsWorker->onMessage = function($connection, $data) { echo "Received message: {$data} "; $result = "Received: {$data}"; $connection->send($result); }; // 处理连接断开事件的回调函数 $wsWorker->onClose = function($connection) { echo "Connection closed "; }; // 启动Worker Worker::runAll();
Ce qui précède est implémenté à l'aide de Workerman Through Lors de l'introduction de cet article, je pense que les lecteurs maîtrisent les connaissances techniques pertinentes sur l'ensemble du contenu du serveur WebSocket et peuvent également utiliser ces techniques pour le développement de projets réels.
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!