Socket.IO - 每两分钟setInverval(Node JS)

时间:2015-05-21 11:58:19

标签: node.js socket.io setinterval

我在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")`

1 个答案:

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