ホームページ  >  記事  >  バックエンド開発  >  Swoole と Workerman のメッセージのサブスクリプションと PHP と MySQL でのパブリッシュのアプリケーション シナリオ

Swoole と Workerman のメッセージのサブスクリプションと PHP と MySQL でのパブリッシュのアプリケーション シナリオ

WBOY
WBOYオリジナル
2023-10-15 08:09:11630ブラウズ

Swoole と Workerman のメッセージのサブスクリプションと PHP と MySQL でのパブリッシュのアプリケーション シナリオ

Swoole と Workerman は、PHP をベースとした 2 つの高性能ネットワーク通信フレームワークで、メッセージのサブスクリプションとパブリッシングにおける幅広いアプリケーション シナリオを備えています。この記事では、PHP と MySQL でメッセージのサブスクリプションとパブリッシュを実装する際の Swoole と Workerman の具体的なアプリケーションを検討し、対応するコード例を示します。

1. 背景の紹介
多くのアプリケーションでは、リアルタイムのメッセージ プッシュやイベント監視、分散タスク スケジューリングなどの機能を実装する必要があります。従来の PHP 開発方法では通常、ポーリングが使用されますが、これは非効率であるだけでなく、多くのシステム リソースを消費します。 Swoole と Workerman は、非同期かつノンブロッキングな方法で、高性能のメッセージ サブスクリプションおよびパブリッシュ機能を提供できます。

2. Swoole と Workerman の特徴

  1. Swoole: Swoole は、PHP 言語用の高性能ネットワーク通信エンジンです。非同期、コルーチン、マルチスレッドなどの主要な機能の完全なセットを提供し、その高性能と低遅延により幅広い注目と用途を獲得しています。
  2. Workerman: Workerman は、高性能でスケーラブルなネットワーク アプリケーションを構築するためのオープン ソースの PHP 非同期イベント駆動ライブラリです。イベント駆動型のアプローチを採用しており、TCP/UDP/SCTPサーバー、開発フレームワーク、ロードバランシング、非同期タスクなどの機能を提供します。

3. Swoole と Workerman のアプリケーション シナリオ

  1. リアルタイム メッセージ プッシュ: クライアントにプッシュする必要がある新しいメッセージがある場合、 SwooleやWorkermanのWebSocket機能。以下は、Swoole を使用してリアルタイム メッセージ プッシュを実装するためのサンプル コードです。
<?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. イベント モニタリング: イベントが発生すると、Swoole と Workerman を使用して、対応するメッセージをリッスンして処理できます。イベント。以下は、Workerman を使用してイベント監視を実装するサンプル コードです:
<?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();

4. MySQL と組み合わせた Swoole と Workerman のアプリケーション
ネットワーク通信のアプリケーションに加えて、Swoole と Workerman は次のこともできます。 MySQL と組み合わせて使用​​できます。データベースを組み合わせて、メッセージの購読と公開の機能を実現します。以下は、Swoole と MySQL を使用してメッセージのサブスクリプションと公開を実装するサンプル コードです。

<?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();

上記のコードでは、メッセージのエンキューとデキューの操作が Swoole のメッセージ キューを通じて実装され、それによってメッセージのサブスクリプションと公開が実現されます。関数。

概要:
リアルタイム メッセージ プッシュでもイベント監視でも、Swoole と Workerman は高性能ソリューションを提供します。 MySQL データベースと組み合わせることで、より複雑なアプリケーション シナリオを実現できます。この記事の紹介とサンプル コードを通じて、読者が Swoole と Workerman による PHP と MySQL でのメッセージ サブスクリプションとパブリッシュの実装についてより明確に理解できることを願っています。

以上がSwoole と Workerman のメッセージのサブスクリプションと PHP と MySQL でのパブリッシュのアプリケーション シナリオの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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