Maison  >  Article  >  développement back-end  >  Fonctions de diffusion de messages et de notification en temps réel d'abonnement de Swoole et Workerman en PHP et MySQL

Fonctions de diffusion de messages et de notification en temps réel d'abonnement de Swoole et Workerman en PHP et MySQL

王林
王林original
2023-10-15 17:25:471220parcourir

Fonctions de diffusion de messages et de notification en temps réel dabonnement de Swoole et Workerman en PHP et MySQL

Fonction de notification en temps réel de diffusion de messages et d'abonnement de Swoole et Workerman en PHP et MySQL

Résumé :
Avec le développement rapide d'Internet, la fonction de notification en temps réel est également devenue un élément indispensable des applications modernes. En PHP et MySQL, nous pouvons utiliser Swoole et Workerman, deux excellentes bibliothèques d'extensions, pour implémenter la diffusion de messages et l'abonnement afin d'obtenir des fonctions de notification en temps réel. Cet article présentera en détail les scénarios d'application de Swoole et Workerman en PHP et MySQL, et donnera des exemples de code spécifiques pour aider les lecteurs à comprendre et à pratiquer la fonction de notification en temps réel.

  1. Introduction
    Swoole est une bibliothèque d'extension PHP qui fournit des capacités de communication réseau entièrement asynchrones et simultanées, permettant à PHP de gérer des requêtes simultanées élevées comme Node.js. Workerman est une autre bibliothèque d'extension PHP qui fournit une bibliothèque de serveur TCP/UDP multi-processus simple et facile à utiliser. La différence entre eux est que Swoole se concentre davantage sur les opérations d'E/S asynchrones non bloquantes, tandis que Workerman se concentre davantage sur le traitement des tâches multi-processus.
  2. Scénarios d'application de Swoole et Workerman
    Swoole et Workerman sont largement utilisés dans les scénarios suivants dans la fonction de notification en temps réel de PHP et MySQL :
  3. Application de chat en ligne : les utilisateurs peuvent recevoir des notifications de messages en temps réel après s'être connectés ;
  4. Système de surveillance en temps réel : les administrateurs système peuvent obtenir les journaux du serveur et les informations d'alarme en temps réel ;
  5. Traitement des tâches asynchrones : une fois le traitement des tâches en arrière-plan terminé, l'utilisateur frontal peut être averti à temps.
  6. Implémentation de la fonction de notification en temps réel de Swoole
  7. Tout d'abord, nous devons créer un serveur Swoole WebSocket pour recevoir et envoyer des messages de notification en temps réel. Voici un exemple simple de serveur Swoole WebSocket :
  8. <?php
    $server = new SwooleWebSocketServer("0.0.0.0", 9501);
    
    $server->on('open', function (SwooleWebSocketServer $server, $request) {
        echo "new connection open: {$request->fd}
    ";
    });
    
    $server->on('message', function (SwooleWebSocketServer $server, $frame) {
        $message = $frame->data;
        // 实现消息广播
        foreach($server->connections as $fd) {
            $server->push($fd, $message);
        }
    });
    
    $server->on('close', function ($ser, $fd) {
        echo "connection close: {$fd}
    ";
    });
    
    $server->start();
Dans l'exemple ci-dessus, nous avons créé un serveur Swoole WebSocket et écouté les événements via on('message') pour implémenter la fonction de diffusion de messages. Lorsqu'une nouvelle connexion est établie, l'ID de connexion sera imprimé ; lorsqu'un message est reçu, toutes les connexions seront traversées et un message sera envoyé à chaque connexion.

    on('message')监听事件,实现了消息广播的功能。当有新的连接建立时,会打印连接的ID;当接收到消息时,将遍历所有连接,并发送消息给每个连接。
    1. Workerman的实时通知功能实现
      类似于Swoole,我们可以通过Workerman的功能来实现实时通知功能。以下是一个简单的Workerman服务器示例:
    <?php
    require_once './Workerman/Autoloader.php';
    
    use WorkermanLibTimer;
    use WorkermanWorker;
    
    $worker = new Worker("websocket://0.0.0.0:2345");
    
    $worker->onWorkerStart = function () {
        Timer::add(1, function () {
            // 实现消息广播
            foreach (Worker::$worker[0]->connections as $connection) {
                $connection->send('Hello');
            }
        });
    };
    
    $worker->onConnect = function ($connection) {
        echo "New connection
    ";
    };
    
    $worker->onMessage = function ($connection, $data) {
        echo "Receiving message: {$data}
    ";
    };
    
    $worker->onClose = function ($connection) {
        echo "Connection closed
    ";
    };
    
    Worker::runAll();

    在上面的示例中,我们创建了一个Workerman WebSocket服务器,并通过Timer::add()方法实现了定时发送消息的功能,实现消息广播。当有新的连接建立时,会打印相关信息;当接收到消息时,会打印消息内容;当连接关闭时,会打印相应信息。

    1. 与MySQL结合实现实时通知功能
      为了实现更加实用的实时通知功能,我们可以与MySQL数据库结合使用。以下是一个示例代码,通过MySQL的触发器实现当新数据插入时,发送实时通知给所有客户端。
    CREATE TABLE `messages` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `content` varchar(255) NOT NULL,
      PRIMARY KEY (`id`)
    );
    
    CREATE TRIGGER `new_message` AFTER INSERT ON `messages` FOR EACH ROW
    BEGIN
      DECLARE message VARCHAR(255);
      SET message = CONCAT('New message: ', NEW.content);
      -- 发送实时通知
      INSERT INTO `notifications` (`message`) VALUES (message);
    END;

    通过以上的触发器定义,当有新的消息插入到messages表中时,会自动触发触发器中的代码,将消息信息插入到notifications表中。然后在Swoole或Workerman的服务器中,实现定时查询notificationsImplémentation de la fonction de notification en temps réel de Workerman

    Semblable à Swoole, nous pouvons implémenter la fonction de notification en temps réel via la fonction de Workerman. Ce qui suit est un exemple simple de serveur Workerman :
    1. rrreee
      Dans l'exemple ci-dessus, nous avons créé un serveur Workerman WebSocket et implémenté la fonction d'envoi régulier de messages via la méthode Timer::add(), implémentez message diffusé. Lorsqu'une nouvelle connexion est établie, les informations pertinentes seront imprimées ; lorsqu'un message est reçu, le contenu du message sera imprimé lorsque la connexion est fermée, les informations correspondantes seront imprimées ;
      1. Combiné avec MySQL pour obtenir une fonction de notification en temps réel🎜Afin d'obtenir une fonction de notification en temps réel plus pratique, nous pouvons l'utiliser en conjonction avec la base de données MySQL. Ce qui suit est un exemple de code qui utilise des déclencheurs MySQL pour envoyer des notifications en temps réel à tous les clients lorsque de nouvelles données sont insérées. 🎜🎜rrreee🎜Avec la définition de déclencheur ci-dessus, lorsqu'un nouveau message est inséré dans la table messages, le code dans le déclencheur sera automatiquement déclenché et les informations du message seront insérées dans les notifications code> tableau. Ensuite dans le serveur Swoole ou Workerman, implémentez la fonction d'interrogation régulière de la table <code>notifications, et lorsqu'il y a une nouvelle notification, envoyez-la au client correspondant. 🎜🎜🎜Résumé🎜Cet article présente comment Swoole et Workerman implémentent la fonction de notification en temps réel dans PHP et MySQL, détaillant les scénarios d'application et des exemples de code spécifiques de chaque bibliothèque. En utilisant ces deux excellentes bibliothèques d'extensions, nous pouvons facilement implémenter des fonctions de notification en temps réel et améliorer l'expérience utilisateur de l'application. Les lecteurs peuvent choisir des bibliothèques et des méthodes appropriées en fonction de leurs propres besoins pour bénéficier de puissantes fonctions de notification 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