PHP と MySQL の Swoole と Workerman のメッセージ ブロードキャストとサブスクリプションのリアルタイム通知機能

王林
リリース: 2023-10-15 17:28:01
オリジナル
1232 人が閲覧しました

PHP と MySQL の Swoole と Workerman のメッセージ ブロードキャストとサブスクリプションのリアルタイム通知機能

Swoole と Workerman の PHP と MySQL によるメッセージ ブロードキャストとサブスクリプションのリアルタイム通知機能

要約:
インターネットの急速な発展により、リアルタイム通知機能 これは、最新のアプリケーションにも不可欠な部分になっています。 PHP と MySQL では、2 つの優れた拡張ライブラリである Swoole と Workerman を使用して、メッセージ ブロードキャストとサブスクリプションを実装し、リアルタイム通知機能を実現できます。この記事では、PHP と MySQL での Swoole と Workerman のアプリケーション シナリオを詳細に紹介し、読者がリアルタイム通知機能を理解して実践できるように、具体的なコード例を示します。

  1. はじめに
    Swoole は、完全な非同期および同時ネットワーク通信機能を提供する PHP 拡張ライブラリで、PHP が Node.js のような同時多発リクエストを処理できるようにします。 Workerman は、シンプルで使いやすいマルチプロセス TCP/UDP サーバー ライブラリを提供するもう 1 つの PHP 拡張ライブラリです。両者の違いは、Swoole は非同期のノンブロッキング IO 操作に重点を置いているのに対し、Workerman はマルチプロセス タスクの処理に重点を置いているということです。
  2. Swoole と Workerman のアプリケーション シナリオ
    Swoole と Workerman は、PHP および MySQL のリアルタイム通知機能の次のシナリオで広く使用されています。
  3. オンライン チャット アプリケーション: ユーザーはログを記録できます。リアルタイムでメッセージ通知を受信;
  4. リアルタイム監視システム: システム管理者はサーバーのログとアラーム情報をリアルタイムで取得できます;
  5. 非同期タスク処理: バックグラウンド タスクの処理が完了した後、フロントエンドユーザーに時間内に通知できます。
  6. Swoole のリアルタイム通知機能の実装
    まず、リアルタイム通知メッセージを送受信するための Swoole WebSocket サーバーを作成する必要があります。以下は、単純な Swoole WebSocket サーバーの例です:
<?php
$server = new SwooleWebSocketServer("0.0.0.0", 9501);

$server->on('open', function (SwooleWebSocketServer $server, $request) {
    echo "new connection open: {$request->fd}
";
});

$server->on('message', function (SwooleWebSocketServer $server, $frame) {
    $message = $frame->data;
    // 实现消息广播
    foreach($server->connections as $fd) {
        $server->push($fd, $message);
    }
});

$server->on('close', function ($ser, $fd) {
    echo "connection close: {$fd}
";
});

$server->start();
ログイン後にコピー

上記の例では、Swoole WebSocket サーバーを作成し、 on('message') を介してイベントをリッスンし、以下を実装します。メッセージブロードキャスト機能。新しい接続が確立されると、接続 ID が出力され、メッセージを受信すると、すべての接続が横断され、各接続にメッセージが送信されます。

  1. Workerman のリアルタイム通知機能の実装
    Swoole と同様に、Workerman の機能を通じてリアルタイム通知機能を実装できます。以下は、単純な Workerman サーバーの例です:
<?php
require_once './Workerman/Autoloader.php';

use WorkermanLibTimer;
use WorkermanWorker;

$worker = new Worker("websocket://0.0.0.0:2345");

$worker->onWorkerStart = function () {
    Timer::add(1, function () {
        // 实现消息广播
        foreach (Worker::$worker[0]->connections as $connection) {
            $connection->send('Hello');
        }
    });
};

$worker->onConnect = function ($connection) {
    echo "New connection
";
};

$worker->onMessage = function ($connection, $data) {
    echo "Receiving message: {$data}
";
};

$worker->onClose = function ($connection) {
    echo "Connection closed
";
};

Worker::runAll();
ログイン後にコピー

上記の例では、Workerman WebSocket サーバーを作成し、Timer::add() メソッドを通じて実装しました。メッセージブロードキャストを実現するために定期的にメッセージを送信します。新しい接続が確立されると関連情報が出力され、メッセージを受信するとメッセージの内容が出力され、接続が閉じられると対応する情報が出力されます。

  1. MySQL と組み合わせてリアルタイム通知機能を実現
    より実用的なリアルタイム通知機能を実現するために、MySQL データベースと組み合わせて使用​​できます。以下は、MySQL トリガーを使用して、新しいデータが挿入されたときにすべてのクライアントにリアルタイム通知を送信するサンプル コードです。
CREATE TABLE `messages` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `content` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
);

CREATE TRIGGER `new_message` AFTER INSERT ON `messages` FOR EACH ROW
BEGIN
  DECLARE message VARCHAR(255);
  SET message = CONCAT('New message: ', NEW.content);
  -- 发送实时通知
  INSERT INTO `notifications` (`message`) VALUES (message);
END;
ログイン後にコピー

上記のトリガー定義により、新しいメッセージが messages テーブルに挿入されると、トリガー内のコードが自動的にトリガーされ、メッセージ情報が通知テーブル。次に、Swoole サーバーまたは Workerman サーバーに、notifications テーブルを定期的にクエリする機能を実装し、新しい通知がある場合は、対応するクライアントに送信します。

  1. 概要
    この記事では、Swoole と Workerman のリアルタイム通知機能を PHP と MySQL で実装する方法を紹介し、各ライブラリの適用シナリオと具体的なコード例を詳しく説明します。これら 2 つの優れた拡張ライブラリを使用することで、リアルタイム通知機能を簡単に実装し、アプリケーションのユーザー エクスペリエンスを向上させることができます。読者は、独自のニーズに応じて適切なライブラリとメソッドを選択し、強力なリアルタイム通知機能を実現できます。

以上がPHP と MySQL の Swoole と Workerman のメッセージ ブロードキャストとサブスクリプションのリアルタイム通知機能の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート