Maison  >  Article  >  développement back-end  >  Scénarios d'application de l'abonnement et de la publication des messages de Swoole et Workerman en PHP et MySQL

Scénarios d'application de l'abonnement et de la publication des messages de Swoole et Workerman en PHP et MySQL

WBOY
WBOYoriginal
2023-10-15 08:09:11630parcourir

Scénarios dapplication de labonnement et de la publication des messages de Swoole et Workerman en PHP et MySQL

Swoole et Workerman sont deux frameworks de communication réseau hautes performances basés sur PHP. Ils disposent d'un large éventail de scénarios d'application en matière d'abonnement et de publication de messages. Cet article explorera les applications spécifiques de Swoole et Workerman dans la mise en œuvre de l'abonnement et de la publication de messages dans PHP et MySQL, et fournira des exemples de code correspondants.

1. Introduction au contexte
Dans de nombreuses applications, il est nécessaire de mettre en œuvre des fonctions telles que l'envoi de messages en temps réel ou la surveillance d'événements, ainsi que la planification distribuée des tâches. La méthode de développement PHP traditionnelle utilise généralement le sondage, ce qui est non seulement inefficace mais consomme également beaucoup de ressources système. Swoole et Workerman peuvent fournir des fonctions d'abonnement et de publication de messages hautes performances de manière asynchrone et non bloquante.

2. Caractéristiques de Swoole et Workerman

  1. Swoole : Swoole est un moteur de communication réseau hautes performances pour le langage PHP. Il fournit un ensemble complet de fonctionnalités clés telles que l'asynchrone, la coroutine et le multithreading, et a reçu une attention et une application généralisées pour ses hautes performances et sa faible latence.
  2. Workerman : Workerman est une bibliothèque PHP asynchrone open source basée sur des événements permettant de créer des applications réseau hautes performances et évolutives. Il adopte une approche basée sur les événements et fournit des fonctions telles que le serveur TCP/UDP/SCTP, le cadre de développement, l'équilibrage de charge et les tâches asynchrones.

3. Scénarios d'application de Swoole et Workerman

  1. Push de messages en temps réel : lorsqu'il y a de nouveaux messages qui doivent être envoyés au client, vous pouvez utiliser la fonction WebSocket de Swoole ou Workerman. Voici un exemple de code permettant d'utiliser Swoole pour implémenter le push de messages en temps réel :
<?php
$serv = new swoole_websocket_server("0.0.0.0", 9501);

$serv->on('open', function($serv, $request) {
    echo "client connected
";
});

$serv->on('message', function($serv, $frame) {
    foreach ($serv->connections as $fd) {
        $serv->push($fd, $frame->data);
    }
});

$serv->on('close', function($serv, $fd) {
    echo "client closed
";
});

$serv->start();
  1. Surveillance d'événements : lorsqu'un événement se produit, vous pouvez utiliser Swoole et Workerman pour écouter et gérer l'événement correspondant. Voici un exemple de code qui utilise Workerman pour implémenter la surveillance des événements :
<?php
require_once __DIR__ . '/vendor/autoload.php';

use WorkermanWorker;

$worker = new Worker();
$worker->onWorkerStart = function($worker) {
    $worker->onMessage = function($connection, $data) {
        // 处理事件
        echo "event happened: " . $data . "
";
    };
};

Worker::runAll();

IV. Application de Swoole et Workerman combinées avec MySQL
En plus des applications de communication réseau, Swoole et Workerman peuvent également être combinées avec la base de données MySQL pour implémenter. fonction d'abonnement et de publication de messages. Voici un exemple de code qui utilise Swoole et MySQL pour implémenter l'abonnement et la publication des messages :

<?php
$server = new SwooleServer('0.0.0.0', 9501, SWOOLE_BASE);

$server->on('receive', function ($server, $fd, $from_id, $data) {
    $conn = new mysqli('localhost', 'username', 'password', 'database');
    if ($conn->connect_error) {
        echo "MySQL Connection Error: " . $conn->connect_error . "
";
        return;
    }

    // 消息入队
    $insert_sql = "INSERT INTO message_queue (message) VALUES ('$data')";
    $conn->query($insert_sql);

    $conn->close();
});

$server->on('workerStart', function ($server, $worker_id) {
    if ($worker_id === 0) {
        // 消息出队
        $timer = SwooleTimer::tick(1000, function () {
            $conn = new mysqli('localhost', 'username', 'password', 'database');
            if ($conn->connect_error) {
                echo "MySQL Connection Error: " . $conn->connect_error . "
";
                return;
            }

            $query_sql = "SELECT message FROM message_queue LIMIT 1";
            $result = $conn->query($query_sql);
            if ($result && $result->num_rows > 0) {
                $row = $result->fetch_assoc();
                // 处理消息
                echo "Processing message: " . $row['message'] . "
";
                // 消息出队
                $delete_sql = "DELETE FROM message_queue WHERE message = '" . $row['message'] . "'";
                $conn->query($delete_sql);
            }

            $conn->close();
        });
    }
});

$server->start();

Dans le code ci-dessus, les opérations de mise en file d'attente et de retrait des messages sont implémentées via la file d'attente des messages de Swoole, réalisant ainsi les fonctions d'abonnement et de publication des messages.

Résumé :
Que ce soit en termes de push de messages en temps réel ou de surveillance d'événements, Swoole et Workerman proposent des solutions performantes. En combinant avec la base de données MySQL, des scénarios d'application plus complexes peuvent être réalisés. J'espère que grâce à l'introduction et à l'exemple de code de cet article, les lecteurs pourront mieux comprendre la mise en œuvre par Swoole et Workerman de l'abonnement et de la publication des messages en PHP et MySQL.

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