ホームページ >バックエンド開発 >PHPチュートリアル >Swoole と Workerman によるメッセージ キューと分散システムの統合とスケーラビリティ
Swoole と Workerman はどちらも PHP ネットワーク通信エンジンであり、メッセージ キューと分散システムの強力な統合および拡張機能を提供します。この記事では、具体的なコード例を通じて、この点でのアプリケーションを示します。
まずは、SwooleとWorkermanの特徴を見ていきましょう。 Swooleは本番環境向けのPHP非同期ネットワーク通信エンジンで、TCP/UDP/Unix Socket/HTTP/WebSocketなどのプロトコルをサポートし、タイマー、非同期タスク、サブプロセス管理などの機能を提供します。 Workerman は、マルチプロセス モデルを採用し、大量の同時接続を処理できる高性能な PHP ソケット フレームワークです。
メッセージキューに関しては、Swooleはswoole_serverのonMessageコールバック関数を提供しており、受信したメッセージをメッセージキューに格納できます。 Redis をメッセージ キューとして使用し、swoole_redis 拡張機能を通じて Swoole と統合できます。
<?php $serv = new swoole_server("127.0.0.1", 9501, SWOOLE_BASE, SWOOLE_SOCK_TCP); $serv->set([ 'worker_num' => 4, // 设置工作进程数 ]); $serv->on('WorkerStart', function ($serv, $worker_id) { // 连接Redis $redis = new Redis(); $redis->connect('127.0.0.1', 6379); // 消息队列名称 $queue_name = 'message_queue'; // 消费消息队列 swoole_timer_tick(1000, function () use ($redis, $queue_name) { while ($message = $redis->lPop($queue_name)) { // 处理消息 echo "Received message: " . $message . " "; } }); }); $serv->on('Receive', function ($serv, $fd, $from_id, $data) { // 将接收到的消息存入Redis消息队列 $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $redis->rPush('message_queue', $data); }); $serv->start(); ?>
上記のコードでは、Swoole サーバーを作成し、ワーカー プロセスの数を 4 に設定しました。 WorkerStart コールバック関数では、Redis に接続し、メッセージ処理関数をコールバック関数として使用して、タイマーを通じてメッセージ キューをポーリングしました。メッセージが到着すると、onReceive コールバック関数が呼び出され、受信したメッセージが Redis メッセージ キューに保存されます。
次に、Workerman のメッセージ キューと分散システムの統合とスケーラビリティを見てみましょう。 Workerman は、EventManager コンポーネントを通じてイベント駆動型の開発を提供します。
<?php require_once __DIR__ . '/Workerman/Autoloader.php'; use WorkermanWorker; use WorkermanRedisQueueClient; use WorkermanEventLoopSelect; $worker = new Worker('tcp://127.0.0.1:9501'); $worker->count = 4; $worker->onWorkerStart = function ($worker) { $redis = new PredisClient(); $queue = new Client($redis); $queue->onMessage = function ($message) { // 处理消息 echo "Received message: " . $message . " "; }; $queue->run(); }; $worker->onMessage = function ($connection, $data) { global $worker; $worker->queue->sendMessage($data); }; Worker::$eventLoopClass = Select::class; Worker::runAll();
上記のコードでは、Workerman サーバーを作成し、4 つのワーカー プロセスをセットアップしました。 onWorkerStart コールバック関数で、Redis に接続し、Redis キュー クライアントを作成しました。キュー クライアントの onMessage コールバック関数を設定してメッセージを処理します。メッセージを受信すると、onMessage コールバック関数が呼び出され、メッセージが Redis メッセージ キューに送信されます。
上記のコード例を通じて、Swoole と Workerman の両方をメッセージ キュー (Redis など) と統合して、分散システムでのメッセージ配信を実装できることがわかります。実際の開発では、特定のニーズに応じて適切なツールを選択できます。 Swoole と Workerman はどちらも優れた拡張機能を提供し、必要に応じてカスタマイズできます。
以上がSwoole と Workerman によるメッセージ キューと分散システムの統合とスケーラビリティの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。