2015-05-21 43 views
0

我在socket.io中有一個事件,它向用戶廣播有多少用戶在線(基於誰登錄)。Socket.IO - setInverval每兩分鐘(Node JS)

我認爲應該發生的事情是,我要求服務器查詢一次使用每兩分鐘setInterval數據庫,而行集返回,然後被髮射到客戶端。

發生了什麼雖然,是爲每個用戶連接到套接字,它正在調用服務器上的數據庫並推送到客戶端。

我不確定爲什麼會是這樣做的 - 我明白,如果我要求它從客戶端做到這一點,但它的發射事件客戶端對服務器,爲什麼會做這個每個用戶連接幾次?

感謝

io.on("connection", function(socket) { 

    // Update online users' every two minutes 
    setInterval(function() { 

    var roomNum = 0; 
    var outObj = {}; 

    model.get_online_users(function(err, rowset) { 

     // Loop thorugh the rowset, set the roomNum and built up out_obj to output 
     io.to("room_number:"+roomNum).emit("online-users", outObj); 

    }); // End `model callback` 

    }, 120000); // End `get_online_users` 

}); // End `io.on("connection")` 

回答

1

io.on("connection", function(socket) { something(); });的代碼被稱爲爲每個連接的用戶,如果你把一個循環,這樣,每一個連接的用戶環路將循環paralelly。

setInterval應該在您的io.on("connection", function(socket) { });之外,並且它會從您的節點服務器開始運行一次,直到關閉服務器。

例子:

setInterval(function() { 

    var roomNum = 0; 
    var outObj = {}; 

    model.get_online_users(function(err, rowset) { 
     io.to("room_number:"+roomNum).emit("online-users", outObj); 
    }); 
}, 120000); 
+0

謝謝雷米 - 這是解決它。 * facepalm * – doublesidedstickytape

+1

很高興聽到它!如果需要,我添加了一個例子。 –