Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Keupayaan pemprosesan masa nyata Swoole dan Workerman untuk baris gilir mesej PHP dan MySQL

Keupayaan pemprosesan masa nyata Swoole dan Workerman untuk baris gilir mesej PHP dan MySQL

王林
王林asal
2023-10-15 16:30:11941semak imbas

Keupayaan pemprosesan masa nyata Swoole dan Workerman untuk baris gilir mesej PHP dan MySQL

Swoole and Workerman: Keupayaan pemprosesan masa nyata baris gilir mesej PHP dan MySQL

Pengenalan:
Dengan pembangunan berterusan teknologi Internet, pemprosesan mesej masa nyata telah menjadi keperluan penting untuk banyak aplikasi Web. Sebagai bahasa yang digunakan secara meluas dalam pembangunan Web, PHP telah menghadapi beberapa cabaran dalam mencapai keupayaan pemprosesan masa nyata. Walau bagaimanapun, dengan menggunakan Swoole dan Workerman, dua sambungan PHP berprestasi tinggi, kami boleh dengan mudah menyedari keupayaan pemprosesan masa nyata baris gilir mesej PHP dan MySQL. Artikel ini akan memperkenalkan penggunaan Swoole dan Workerman secara terperinci dan memberikan contoh kod khusus.

1. Pengenalan kepada Swoole
Swoole ialah sambungan yang menyediakan keupayaan komunikasi rangkaian berprestasi tinggi untuk pembangun PHP. Ia menyediakan satu set pelayan TCP, UDP, HTTP, WebSocket yang tidak menyekat, tak segerak, dan pelanggan yang boleh digunakan untuk melaksanakan pelayan rangkaian berprestasi tinggi dan sistem pemprosesan mesej masa nyata. Dari segi merealisasikan keupayaan pemprosesan masa nyata bagi baris gilir mesej PHP dan MySQL, Swoole boleh menyediakan keupayaan pemprosesan serentak yang agak tinggi.

Berikut ialah contoh kod untuk menggunakan Swoole untuk melaksanakan baris gilir mesej PHP dan 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();

Dalam kod di atas, kami mentakrifkan kelas MySQLQueue, di mana kaedah pop() digunakan untuk dapatkan baris gilir mesej daripada data MySQL dan tetapkan bendera status kepada 1 (menunjukkan bahawa ia telah diproses). Dalam pelayan Swoole, kami menggunakan kaedah $server->taskwait() untuk melakukan pertanyaan MySQL tak segerak $this->pool mewakili sambungan yang kami buat sebelum ini . 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. Pengenalan kepada Workerman

Workerman ialah satu lagi rangka kerja sumber terbuka PHP yang menyediakan keupayaan pengaturcaraan rangkaian berprestasi tinggi. Ia menyediakan satu set API komunikasi rangkaian berprestasi tinggi yang mudah digunakan untuk membina aplikasi masa nyata. Workerman boleh digunakan untuk membina pelbagai jenis aplikasi seperti pelayan Web, pelayan WebSockets, dan pelayan TCP/UDP.

Berikut ialah contoh kod untuk menggunakan Workerman untuk melaksanakan baris gilir mesej PHP dan MySQL: 🎜rrreee🎜Dalam kod di atas, kami menggunakan sambungan WorkermanMySQL untuk menyambung ke pangkalan data MySQL. Kaedah $worker->onWorkerStart secara berkala menanyakan baris gilir mesej dalam pangkalan data dan menghantar keputusan kepada semua sambungan pelanggan apabila hasil pertanyaan tidak kosong. 🎜🎜Kesimpulan: 🎜Artikel ini memperkenalkan dua sambungan PHP berprestasi tinggi, Swoole dan Workerman, dalam merealisasikan keupayaan pemprosesan masa nyata baris gilir mesej PHP dan MySQL, dan memberikan contoh kod yang sepadan. Dengan menggunakan Swoole dan Workerman, kami boleh meningkatkan prestasi PHP dalam pemprosesan mesej masa nyata dan memenuhi keperluan aplikasi Web untuk keupayaan pemprosesan masa nyata. Saya harap pembaca dapat memahami penggunaan asas Swoole dan Workerman melalui artikel ini, dan menerapkannya pada projek mereka sendiri dalam pembangunan sebenar. 🎜

Atas ialah kandungan terperinci Keupayaan pemprosesan masa nyata Swoole dan Workerman untuk baris gilir mesej PHP dan MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn