0

nodeJsでロングポーリングを使用して、ソーシャルネットワークのような通知を実装しました

データベース、私は redis と cassandra を使用しています

タイムスタンプを「user_read」としてredisに保存しました

ユーザーが通知を読むたびに、「user_read」を更新します

データベースが「user_read」より大きいタイムスタンプの通知を受け取ったとき

ユーザーに返信します

私のコードはこのようなものです

function(req, res){
longPoll()
function longPoll(){
    async.waterfall([
         connectDB,
         getNotification             
],function(err,data){
    if(there's no notification timestamp larger than user_read){
          setTimeout(longPoll, 1000);
    }else if(there's new data){
          res.json(data);
    }

    if(con)
       con.close();
})
}
};

ここに私の質問があります:

  1. ここで setTimeout を使用していますが、適切ですか? おそらくnextTickまたはsetIntervalを使用しますか?
  2. DB からクエリを実行した後は毎回接続を閉じる必要がありますか?それとも、応答するときに 1 回だけ閉じる必要がありますか?
  3. 提案を最適化し、最適化したいですか?
4

1 に答える 1

0

通常はnextTickの方が適切ですが、別の観点から考えてみてください。基本的に、ロングポーリングに接続しているすべてのユーザーに対して毎秒DBを「ショートポーリング」しています。

したがって、長いポーリングのために Web サーバーが不要なポーリングを取得していない場合でも (ところで、空の回答でも終了条件はありますか?)、データベースをショートポーリングしています。

于 2012-07-25T16:28:31.917 に答える