0

私のアプリは 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 自体を活用するより良い方法はありますか?

アドバイスをありがとう

4

1 に答える 1

0

私が正しく覚えていれば、socket.ioがクライアント側に接続されているとき、アクティブな接続を確認して結果を返すたびにクライアントにリクエストを送信し、コールバック成功で、更新時にアクティブなユーザーになるコードをDBに入れることができます。また、DB から 5 分を超えて最後のメモを取得した場合。

于 2014-02-01T10:47:48.347 に答える