Socket.IO - 每两分钟设置一次(Node JS)
Socket.IO - setInverval every two minutes (Node JS)
我在 socket.io 中有一个事件向用户广播有多少用户在线(基于谁登录)。
我认为应该发生的是,我要求服务器使用 setInterval
每两分钟查询一次数据库 一次 ,然后返回一个行集,然后发出给客户。
但发生的事情是,对于连接到套接字的每个 用户,它正在调用服务器上的数据库并推送到客户端。
我不确定为什么这样做 - 如果我要求它从客户端执行此操作我会理解,但因为它是服务器发出事件 to客户端,为什么要为每个连接的用户执行多次此操作?
谢谢
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")`
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);
我在 socket.io 中有一个事件向用户广播有多少用户在线(基于谁登录)。
我认为应该发生的是,我要求服务器使用 setInterval
每两分钟查询一次数据库 一次 ,然后返回一个行集,然后发出给客户。
但发生的事情是,对于连接到套接字的每个 用户,它正在调用服务器上的数据库并推送到客户端。
我不确定为什么这样做 - 如果我要求它从客户端执行此操作我会理解,但因为它是服务器发出事件 to客户端,为什么要为每个连接的用户执行多次此操作?
谢谢
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")`
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);