ホームページ  >  記事  >  バックエンド開発  >  Swoole と Workerman の PHP および MySQL メッセージ キューに対するリアルタイム処理機能

Swoole と Workerman の PHP および MySQL メッセージ キューに対するリアルタイム処理機能

王林
王林オリジナル
2023-10-15 16:30:11992ブラウズ

Swoole と Workerman の PHP および MySQL メッセージ キューに対するリアルタイム処理機能

Swoole と Workerman: PHP および MySQL メッセージ キューのリアルタイム処理機能

はじめに:
インターネット テクノロジーの継続的な発展により、リアルタイム メッセージは処理は Web アプリケーションにとって重要な要件となっています。 Web 開発で広く使用されている言語である PHP は、リアルタイム処理機能を実現する際にいくつかの課題に直面しています。ただし、2 つの高性能 PHP 拡張機能である Swoole と Workerman を使用すると、PHP および MySQL メッセージ キューのリアルタイム処理機能を簡単に実現できます。この記事では、Swoole と Workerman の使い方を詳しく紹介し、具体的なコード例を示します。

1. Swoole の概要
Swoole は、PHP 開発者に高性能のネットワーク通信機能を提供する拡張機能です。高性能ネットワーク サーバーとリアルタイム メッセージ処理システムの実装に使用できる、ノンブロッキングの非同期 TCP、UDP、HTTP、WebSocket サーバーとクライアントのセットを提供します。 PHP および MySQL メッセージ キューのリアルタイム処理能力を実現するという点で、Swoole は比較的高い同時処理能力を提供できます。

以下は、Swoole を使用して PHP および 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();

上記のコードでは、MySQLQueue クラスを定義します。 メソッドは、MySQL からメッセージ キュー内のデータを取得し、ステータス フラグを 1 (処理されたことを示す) に設定します。 Swoole のサーバーでは、$server->taskwait() メソッドを使用して非同期 MySQL クエリを実行します。 $this->pool は、以前に作成した接続プールを表します。

2. Workerman の概要

Workerman は、高性能ネットワーク プログラミング機能を提供するもう 1 つの PHP オープン ソース フレームワークです。リアルタイム アプリケーションを構築するための、使いやすく高性能なネットワーク通信 API のセットを提供します。 Workerman を使用して、Web サーバー、WebSocket サーバー、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 メソッドは、データベース内のメッセージ キューを定期的にクエリし、クエリ結果が空でない場合は、結果をすべてのクライアント接続に送信します。

結論:

この記事では、PHP および MySQL メッセージ キューのリアルタイム処理機能を実現する 2 つの高性能 PHP 拡張機能、Swoole と Workerman を紹介し、対応するコード例を示します。 Swoole と Workerman を使用すると、リアルタイム メッセージ処理における PHP のパフォーマンスが向上し、Web アプリケーションのリアルタイム処理機能のニーズを満たすことができます。読者の皆様には、この記事を通じて Swoole と Workerman の基本的な使い方を理解し、実際の開発プロジェクトに適用していただければ幸いです。

以上がSwoole と Workerman の PHP および MySQL メッセージ キューに対するリアルタイム処理機能の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。