PHP はどのようにして Redis メッセージ サブスクリプションをリッスンし続け、フロントエンドにプッシュするのでしょうか?
概要:
多くの Web アプリケーションでは、リアルタイムのプッシュ メッセージが一般的な要件です。メッセージをリアルタイムでフロントエンドに送信する必要がある場合、最新のデータを取得するためにポーリングまたはロングポーリングを使用することがよくあります。しかし、この方法ではサーバーリソースを大量に消費し、応答速度もリアルタイム性が十分ではありません。 Redis のメッセージ キュー メカニズムを使用すると、この問題をうまく解決できます。この記事では、PHP を使用して Redis メッセージ サブスクリプションを継続的に監視し、メッセージをリアルタイムでフロントエンドにプッシュする方法を紹介します。
実装手順:
sudo apt-get install redis-server sudo apt-get install php-redis
<?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) にサブスクライブします。メッセージが到着すると、コールバック関数がメッセージをフロントエンドにプッシュします。
フロントエンド ページを PHP スクリプトに埋め込みます:
フロントエンド ページを PHP スクリプトに埋め込みます。コード例は次のとおりです:<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>
スクリプトを実行します。
上記の PHP スクリプトを submit.php として保存し、フロントエンド ページをindex.html として保存し、ターミナルで次のコマンドを実行します。<?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 を使用して Redis メッセージ サブスクリプションを継続的に監視し、リアルタイムでフロントエンド ページにメッセージをプッシュできます。これにより、リアルタイムでメッセージをプッシュする機能が実現され、ポーリングやロングポーリング方式によるサーバーリソースの浪費やリアルタイム応答速度不足の問題を回避できます。さらに、実際のニーズに応じてコードを最適化および拡張して、システムのパフォーマンスと安定性を向上させることができます。
以上がPHP はどのようにして Redis メッセージ サブスクリプションをリッスンし続け、フロントエンドにプッシュするのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。