Maison > cadre php > Workerman > le corps du texte

Développement Workerman : Comment implémenter un serveur WebSocket

WBOY
Libérer: 2023-11-07 15:29:01
original
1304 Les gens l'ont consulté

Développement Workerman : Comment implémenter un serveur WebSocket

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.

  1. Installer Workerman

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
Copier après la connexion
Copier après la connexion
  1. Écriture du code du serveur WebSocket

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();
Copier après la connexion

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 :

  1. Lorsqu'une nouvelle connexion WebSocket est établie, la fonction de rappel onConnect sera appelée ici. Nous pouvons enregistrer des journaux, compter les utilisateurs en ligne et d'autres opérations.
  2. Lorsqu'un message WebSocket est reçu, la fonction de rappel onMessage sera appelée. Nous devons traiter le message ici, comme effectuer des calculs simples, envoyer des réponses, etc.
  3. La dernière étape consiste à démarrer le Worker, qui commencera à écouter le port spécifié et gérera les connexions et les messages WebSocket.
  4. Traitement des messages WebSocket

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}");
};
Copier après la connexion

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
";
};
Copier après la connexion
  1. Cadre d'intégration

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
Copier après la connexion
Copier après la connexion

Ensuite, nous pouvons créer une commande Artisan personnalisée pour démarrer le serveur WebSocket :

php artisan make:command WebSocketServer
Copier après la connexion

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();
    }
}
Copier après la connexion

Enfin, nous pouvons démarrer le serveur WebSocket avec la commande suivante :

php artisan websocket:server
Copier après la connexion

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.

  1. Exemple de code complet

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();
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!