我在socket.io中有一个事件,它会向用户广播有多少用户在线(基于谁登录)。
我认为应该发生的是,我要求服务器使用setInterval
每两分钟查询数据库一次,然后返回一个行集,然后发送给客户端。< / p>
但是,发生了什么,是连接到套接字的每个用户的,它正在服务器上调用数据库并推送到客户端。
我不确定为什么这样做 - 我明白我是否要求它从客户端执行此操作,但因为服务器将事件发送到客户端,为什么会这样做它会为每个连接的用户多次执行此操作吗?
由于
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")`
答案 0 :(得分:1)
为每个连接的用户调用io.on("connection", function(socket) { something(); });
中的代码,如果你在其中放置一个循环,循环将为每个连接的用户循环循环。
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);