ホームページ  >  記事  >  バックエンド開発  >  PHP はどのようにして Redis メッセージ サブスクリプションをリッスンし続け、フロントエンドにプッシュするのでしょうか?

PHP はどのようにして Redis メッセージ サブスクリプションをリッスンし続け、フロントエンドにプッシュするのでしょうか?

王林
王林オリジナル
2023-09-05 17:42:29756ブラウズ

PHP はどのようにして Redis メッセージ サブスクリプションをリッスンし続け、フロントエンドにプッシュするのでしょうか?

PHP はどのようにして Redis メッセージ サブスクリプションをリッスンし続け、フロントエンドにプッシュするのでしょうか?

概要:
多くの Web アプリケーションでは、リアルタイムのプッシュ メッセージが一般的な要件です。メッセージをリアルタイムでフロントエンドに送信する必要がある場合、最新のデータを取得するためにポーリングまたはロングポーリングを使用することがよくあります。しかし、この方法ではサーバーリソースを大量に消費し、応答速度もリアルタイム性が十分ではありません。 Redis のメッセージ キュー メカニズムを使用すると、この問題をうまく解決できます。この記事では、PHP を使用して Redis メッセージ サブスクリプションを継続的に監視し、メッセージをリアルタイムでフロントエンドにプッシュする方法を紹介します。

実装手順:

  1. Redis と PHP 拡張機能のインストール:
    まず、Redis をインストールし、PHP Redis 拡張機能がサーバーにインストールされていることを確認する必要があります。 Redis および Redis 拡張機能は、次のコマンドを使用してインストールできます:
sudo apt-get install redis-server
sudo apt-get install php-redis
  1. Redis メッセージ サブスクリプション用の PHP スクリプトを作成します:
    Redis メッセージ サブスクリプションをリッスンするための PHP スクリプトを作成します (コード例)次のように:
<?php
$redis = new Redis();
$redis->connect('localhost', 6379);

$redis->subscribe(['channel_name'], function ($redis, $channel, $message) {
    // 将消息推送到前端
    echo "<script>console.log('New message:', " . $message . ");</script>";
    ob_flush();
    flush();
});

$redis->close();
?>

このコードでは、まず Redis の connect メソッドを通じてローカル Redis サーバーに接続し、subscribe メソッドを使用して指定されたチャネル (channel_name) にサブスクライブします。メッセージが到着すると、コールバック関数がメッセージをフロントエンドにプッシュします。

  1. フロントエンド ページの作成:
    受信したメッセージを表示するフロントエンド ページを作成します。コード例は次のとおりです。 DOMの操作にはjQueryライブラリを使用し、showMessage関数を定義することで受信したメッセージをページに表示します。

フロントエンド ページを PHP スクリプトに埋め込みます:

フロントエンド ページを PHP スクリプトに埋め込みます。コード例は次のとおりです:
  1. <html>
    <head>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    </head>
    <body>
        <div id="message-holder"></div>
        <script>
            function showMessage(message) {
                $('#message-holder').append('<p>' + message + '</p>');
            }
        </script>
    </body>
    </html>

    このコードの鍵 その一部は echo ステートメントであり、showMessage 関数を呼び出してメッセージを表示のためにフロントエンド ページに渡します。

スクリプトを実行します。

上記の PHP スクリプトを submit.php として保存し、フロントエンド ページをindex.html として保存し、ターミナルで次のコマンドを実行します。
  1. <?php
    $redis = new Redis();
    $redis->connect('localhost', 6379);
    
    $redis->subscribe(['channel_name'], function ($redis, $channel, $message) {
        //将消息推送到前端
        echo "<script>window.parent.showMessage('" . $message . "');</script>";
        ob_flush();
        flush();
    });
    
    $redis->close();
    ?>

    新しいメッセージが到着すると、PHP スクリプトはメッセージをフロントエンド ページにプッシュしてリアルタイムで表示します。
概要:

上記の手順を通じて、PHP を使用して Redis メッセージ サブスクリプションを継続的に監視し、リアルタイムでフロントエンド ページにメッセージをプッシュできます。これにより、リアルタイムでメッセージをプッシュする機能が実現され、ポーリングやロングポーリング方式によるサーバーリソースの浪費やリアルタイム応答速度不足の問題を回避できます。さらに、実際のニーズに応じてコードを最適化および拡張して、システムのパフォーマンスと安定性を向上させることができます。

以上がPHP はどのようにして Redis メッセージ サブスクリプションをリッスンし続け、フロントエンドにプッシュするのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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