私のアプリは PHP (nginx/php-fpm で提供) で構築されており、ユーザーのプッシュ通知には node/js と socket.io を使用しています。これらは Redis pub/sub を使用してプッシュされ、PHP と node.js の間で相互リンクされます
node.js アプリは、オンライン ユーザー ID の配列を維持します。ユーザーが socket.io に接続すると追加され、切断するとアレイから削除されます。
MySQL はメイン データベースとして使用され、誰が誰をフォローしているかを示す標準的な関係テーブルがあります。フォロワーのユーザー ID のリストは、ユーザーがログインして表示されるときに取得されます。
これら 2 つのデータ セットを交差させて、これらの関係のライブ オンライン ステータスを Facebook と同様の方法で提供したいと考えています (オンラインは青信号、オフラインは灰色)。
これを管理する最もパフォーマンスが高く、最もスケーラブルな方法は何でしょうか。私の現在の思考プロセスは次のとおりです。
クライアント側には、フォロワーのユーザー ID の JavaScript 配列があります。この配列を約 60 秒ごとに node.js アプリにプッシュするタイマー クライアント側をセットアップします。Node.js は、フォロワー ID と現在のオンライン ユーザーの配列との交差を処理し、どのユーザーがオンラインであるかを示すオブジェクトを返します。
これでうまくいきますが、すべてのオンライン ユーザーのユーザー フォロワー リストを一貫してループするのは、node.js に大きな負荷がかかるように感じます。または、おそらく私は間違っています.メインアプリケーション自体がPHPによって提供され、現在通知のプッシュのみを処理するノードを介していないことを考えると、これは比較的些細なことでしょうか?
とにかく、もっと良い方法はありますか?また、redis を使用してユーザーのアクティビティ ストリームを構築していることも注目に値します (データは MySQL に保存され、redis はアクティビティ ID のリストを維持します)。
すでに Redis サーバーがアクティブになっているのを見て、代わりに Redis 自体を活用するより良い方法はありますか?
アドバイスをありがとう