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);