Maison >cadre php >Workerman >Modèle de développement Workerman : meilleures pratiques pour la mise en œuvre de fonctions de transmission de données en temps réel

Modèle de développement Workerman : meilleures pratiques pour la mise en œuvre de fonctions de transmission de données en temps réel

PHPz
PHPzoriginal
2023-08-05 08:13:131120parcourir

Modèle de développement Workerman : meilleures pratiques pour la mise en œuvre de fonctions de transmission de données en temps réel

Introduction :
Avec le développement rapide d'Internet, la transmission de données en temps réel est devenue une fonction nécessaire pour de nombreuses applications. Dans le domaine de PHP, Workerman est sans aucun doute l’un des frameworks de push de données en temps réel les plus puissants. Cet article décrira comment utiliser Workerman pour développer des capacités de transmission de données en temps réel et fournira quelques exemples de code de bonnes pratiques.

1. Qu’est-ce que Workerman ?
Workerman est un framework de communication réseau asynchrone PHP hautes performances dans le domaine PHP. Il est développé sur la base de PHP pur sans aucune dépendance et peut s'exécuter de manière indépendante. Workerman adopte un modèle IO non bloquant et peut gérer un grand nombre de connexions simultanées. Dans le même temps, il fournit également une interface pratique et facile à utiliser, permettant aux développeurs de développer rapidement des applications en temps réel hautes performances.

2. Créez une simple application push de données en temps réel
Tout d'abord, nous devons utiliser composer pour installer Workerman :

composer require workerman/workerman

Ensuite, nous créons un fichier server.php et entrons le code suivant :

<?php
require_once __DIR__ . '/vendor/autoload.php';

use WorkermanWorker;

// 创建一个Worker监听8080端口,使用websocket协议通讯
$ws_worker = new Worker('websocket://0.0.0.0:8080');

// 启动4个进程对外提供服务
$ws_worker->count = 4;

// 当客户端与服务端建立连接时触发
$ws_worker->onConnect = function ($connection) {
    echo "New connection
";
};

// 当客户端给服务端发送消息时触发
$ws_worker->onMessage = function ($connection, $data) use ($ws_worker) {
    // 将消息广播给所有客户端
    foreach ($ws_worker->connections as $client_connection) {
        $client_connection->send($data);
    }
};

// 当客户端与服务端断开连接时触发
$ws_worker->onClose = function ($connection) {
    echo "Connection closed
";
};

// 运行worker
Worker::runAll();

Ce code crée simplement Un serveur Websocket déclenchera les événements correspondants lorsqu'un nouveau client se connecte, envoie un message ou se déconnecte. La logique spécifique de traitement des événements peut être modifiée en fonction des besoins réels.

3. Exemple de code client
Afin de tester notre fonction de push de données en temps réel, nous pouvons créer un simple fichier html pour simuler le client. Dans ce fichier html, nous utilisons javascript pour implémenter la connexion websocket et envoyer et recevoir des messages.

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>实时数据推送</title>
    <script>
        var ws = new WebSocket('ws://127.0.0.1:8080');

        ws.onopen = function () {
            console.log('已连接服务器');
        };

        ws.onmessage = function (event) {
            console.log('收到消息:' + event.data);
        };

        function send() {
            var message = document.getElementById('message').value;
            ws.send(message);
            console.log('发送消息:' + message);
        }
    </script>
</head>
<body>
    <input type="text" id="message" placeholder="请输入要发送的消息">
    <button onclick="send()">发送</button>
</body>
</html>

Ce code javascript créera une connexion websocket et définira les événements liés à l'établissement d'une connexion avec le serveur, à la réception de messages et à l'envoi de messages. En saisissant le message à envoyer dans la zone de saisie et en cliquant sur le bouton "Envoyer", le message pourra être envoyé au serveur et le message reçu sera affiché sur la console.

4. Meilleures pratiques
Dans le développement réel, de nombreux facteurs doivent être pris en compte, tels que le contrôle des autorisations, la gestion des groupes, la vérification des messages, etc. Voici un exemple de code pour les meilleures pratiques :

  1. Vérification de la connexion utilisateur :
// 在onConnect事件中验证用户登录
$ws_worker->onConnect = function ($connection) {
    // 获取用户token
    $token = $connection->getRequestHeader('token');
    // 验证token
    if (!verifyToken($token)) {
        $connection->close();
    }
};
  1. Gestion du groupe :
// 创建分组、加入分组和发送给指定分组的示例代码
$group = new WorkermanConnectionConnections();
$group->add($client_connection);
$ws_worker->group['group_name'] = $group;
...

// 发送消息给指定分组
$ws_worker->group['group_name']->send($data);
  1. Envoi d'un message à un client spécifié :
// 在onMessage事件中判断要发送的客户端id
$id = $data['recipient_id'];
if ($connection = $ws_worker->uidConnections[$id] ?? null) {
    // 找到对应的客户端连接并发送消息
    $connection->send($data);
}

Conclusion :
Cet article explique comment utiliser Workerman Framework pour développer des capacités de transmission de données en temps réel et fournit des exemples de code de bonnes pratiques. En étudiant ces exemples, je pense que les lecteurs peuvent rapidement démarrer avec Workerman et l'utiliser pour développer des applications temps réel hautes performances. Si vous souhaitez continuer à en apprendre davantage sur Workerman, vous pouvez vous référer à sa documentation officielle détaillée. Je vous souhaite bonne chance pour utiliser Workerman pour développer une fonction de transmission de données en temps réel !

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