Maison  >  Article  >  développement back-end  >  Capacités de traitement en temps réel de Swoole et Workerman pour les files d'attente de messages PHP et MySQL

Capacités de traitement en temps réel de Swoole et Workerman pour les files d'attente de messages PHP et MySQL

王林
王林original
2023-10-15 16:30:11941parcourir

Capacités de traitement en temps réel de Swoole et Workerman pour les files dattente de messages PHP et MySQL

Swoole et Workerman : Capacités de traitement en temps réel des files d'attente de messages PHP et MySQL

Introduction :
Avec le développement continu de la technologie Internet, le traitement des messages en temps réel est devenu une exigence importante pour de nombreuses applications Web. En tant que langage largement utilisé dans le développement Web, PHP a rencontré certains défis pour atteindre des capacités de traitement en temps réel. Cependant, en utilisant Swoole et Workerman, deux extensions PHP hautes performances, nous pouvons facilement réaliser les capacités de traitement en temps réel des files d'attente de messages PHP et MySQL. Cet article présentera en détail l'utilisation de Swoole et Workerman et donnera des exemples de code spécifiques.

1. Introduction à Swoole
Swoole est une extension qui offre des capacités de communication réseau hautes performances aux développeurs PHP. Il fournit un ensemble de serveurs et de clients TCP, UDP, HTTP, WebSocket asynchrones et non bloquants qui peuvent être utilisés pour mettre en œuvre des serveurs réseau hautes performances et des systèmes de traitement de messages en temps réel. En termes de réalisation de capacités de traitement en temps réel des files d'attente de messages PHP et MySQL, Swoole peut fournir des capacités de traitement simultané relativement élevées.

Ce qui suit est un exemple de code permettant d'utiliser Swoole pour implémenter les files d'attente de messages PHP et MySQL :

<?php
class MySQLQueue {
    private $server;
    private $pool;
    
    public function __construct($server, $pool){
        $this->server = $server;
        $this->pool = $pool;
    }
    
    public function pop(){
        $result = $this->server->taskwait(function ($mysql_connection){
            return $mysql_connection->query("SELECT * FROM queue WHERE status = 0 LIMIT 1");
        }, $this->pool, function ($result, $db){
            $db->query("UPDATE queue SET status = 1 WHERE id = {$result['id']}");
        });
        
        return $result;
    }
}

$serv = new swoole_server("127.0.0.1", 9501, SWOOLE_BASE, SWOOLE_SOCK_TCP);
$pool = new swoole_connpool(SWOOLE_MYSQL);
$pool->server = $serv;
$pool->onRequest = function ($conn){
    $mysql = new SwooleCoroutineMySQL();
    $mysql->connect(['host' => '127.0.0.1', 'port' => 3306, 'user' => 'root', 'password' => 'password', 'database' => 'test']);
    $conn->send((new MySQLQueue($this->server, $this))->pop());
};

$serv->set(array('worker_num' => 4, 'task_worker_num' => 4));
$serv->start();

Dans le code ci-dessus, nous définissons une classe MySQLQueue, dans laquelle la méthode pop() est utilisée pour obtenez la file d'attente de messages à partir des données MySQL dans le fichier et définissez l'indicateur d'état sur 1 (indiquant qu'il a été traité). Dans le serveur de Swoole, nous utilisons la méthode $server->taskwait() pour effectuer des requêtes MySQL asynchrones. $this->pool représente la connexion que nous avons créée auparavant. . pop()方法用于从MySQL中获取消息队列中的数据,并将状态标志设为1(表示已处理)。在Swoole的服务器中,我们使用了$server->taskwait()方法来进行异步MySQL查询,$this->pool表示我们之前创建的连接池。

二、Workerman简介
Workerman是另一个提供高性能网络编程能力的PHP开源框架。它提供了一套简单易用、高性能的网络通信API,用于构建实时应用。Workerman可以用于构建Web服务器、WebSockets服务器和TCP/UDP服务器等多种类型的应用。

以下是使用Workerman实现PHP与MySQL消息队列的示例代码:

<?php
require_once '/path/to/vendor/autoload.php';
use WorkermanWorker;
use WorkermanLibTimer;

$worker = new Worker();
$worker->count = 4;
$worker->onWorkerStart = function($worker) {
    $mysql = new WorkermanMySQLConnection('127.0.0.1', '3306', 'root', 'password', 'test');
    Timer::add(1, function() use ($worker, $mysql) {
        $result = $mysql->select('*')->from('queue')->where('status=0')->limit(1)->query();
        if (!$result) {
            return;
        }
        $mysql->update('queue')->set('status=1')->where('id=?', $result[0]['id'])->query();
        foreach ($worker->connections as $connection) {
            $connection->send(json_encode($result[0]));
        }
    });
};

$worker->onConnect = function($connection) {
    $connection->send('Connected');
};

$worker->onMessage = function($connection, $data) {
    $connection->send('Received: ' . $data);
};
Worker::runAll();

在上述代码中,我们使用了WorkermanMySQL扩展来连接MySQL数据库。$worker->onWorkerStart

2. Introduction à Workerman

Workerman est un autre framework open source PHP qui offre des capacités de programmation réseau hautes performances. Il fournit un ensemble d'API de communication réseau faciles à utiliser et hautes performances pour créer des applications en temps réel. Workerman peut être utilisé pour créer différents types d'applications telles que des serveurs Web, des serveurs WebSockets et des serveurs TCP/UDP.

Ce qui suit est un exemple de code permettant d'utiliser Workerman pour implémenter les files d'attente de messages PHP et MySQL : 🎜rrreee🎜Dans le code ci-dessus, nous utilisons l'extension WorkermanMySQL pour nous connecter à la base de données MySQL. La méthode $worker->onWorkerStart interroge périodiquement la file d'attente de messages dans la base de données et envoie les résultats à toutes les connexions client lorsque le résultat de la requête n'est pas vide. 🎜🎜Conclusion : 🎜Cet article présente les deux extensions PHP hautes performances, Swoole et Workerman, pour réaliser les capacités de traitement en temps réel des files d'attente de messages PHP et MySQL, et donne des exemples de code correspondants. En utilisant Swoole et Workerman, nous pouvons améliorer les performances de PHP dans le traitement des messages en temps réel et répondre aux besoins des applications Web en matière de capacités de traitement en temps réel. J'espère que les lecteurs pourront comprendre l'utilisation de base de Swoole et Workerman à travers cet article et les appliquer à leurs propres projets en développement 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