2017-06-13 6 views
0

setInterval機能が実行されないようにするには、setInterval機能が停止する方法を見つけようとしています。のリソース。 ソケットを介して接続されているユーザーの数が少なくとも1つである場合、ユーザー定義関数を実行する - Nodejs

は、私は方法を見つけましたが、私は置く方法を知らない、それ以下

io.engine.clientsCount //this will tell number of users connected but only inside socket.on function. 

は私のコードです:どうすればよいのsetIntervalの最良の停止実行の場合(テスト、5000)無

var connectCounter = 0; 


app.get('/', function(req, res){ 
    res.sendFile(__dirname + '/index.html'); 
}); 


function test() 
    { 
    httpk.get("api-url", function(res) { 
     var body = ''; 
     res.on('data', function(data){ 
      body += data; 
     }); 

     res.on('end', function() { 
      var parsed = JSON.parse(body); 
      console.log(parsed.johndoe.example1); 
      nsp.emit('live-quote', parseFloat(parsed.johndoe.example1); 
     }); 
    }); 
    } 

    setInterval(test,5000); 

nsp.on('connection', function(socket){ 


    //Make a http call 
    connectCounter++; 
    nsp.emit('live-users',connectCounter); 
    console.log('1 user connected, Total Joined: '+connectCounter); 

    socket.on('disconnect', function(){ 
    connectCounter--; 
    nsp.emit('live-users',connectCounter); 
    console.log('1 user disconnected, Total Left: '+connectCounter); 


    }); 

console.log("total clients: "+io.engine.clientsCount); 

if(io.engine.clientsCount >= 1) 
{ 
    //do something 
    //if I put setInterval here it will cause problems, that is for each connection it will run setInterval causing lot of http get request 
    // meaning, if 100 users then 100 get request in 5 seconds (depending on setInterval time). 
} 

}); 

ユーザーは接続しましたか?

答えて

1

clearInterval

Stop setInterval call in JavaScript

を参照してください使用し、setInterval停止するには、あなたはまた、あなたが何/ 1 +接続しているユーザーを持っていない場合は/停止setIntervalを再開するために助けが必要ですか?

もしそうなら、あなたはカウンターと同時にあなたのsetIntervalへの参照を管理しようとすることができます

var connectCounter = 0; 
var interval = undefined; 

その後:

connectCounter++; 
if (interval === undefined) interval = setInterval(test,5000); 

その後:

connectCounter--; 
if (connectCounter <= 0 && interval !== undefined) interval = clearInterval(interval); 
+0

そのありませんちょうどclearIntervalを使用しています。私はclearInterval JSの機能を認識しています。しかしここで問題はソケットに関してです。関数testとsetIntervalはnsp.on()ソケット接続の範囲外であり、接続されているユーザの総数はnsp.on()関数内でしか見つかりませんが、socket.on接続内でsetIntervalを持つことはできません。接続されたクライアントごとにsetIntervalが実行されるためです。 –

+0

私の答えを更新しました:) – RaphaMex

+0

いいえ。私は数時間でそれを試してみましょう。 –