大量的计时器与一个大计时器节点JS

时间:2016-10-15 10:46:58

标签: javascript node.js

所以我正在使用nodeJS websockets构建一个实时应用程序(游戏)。 有多个地图,每个地图都有对象和玩家,应该始终同步。

我决定使用多个计时器(每个连接的套接字一个间隔),而不是使用一个大型计时器,它将数据包发送给特定房间中的连接用户。

我的问题是:这是一个可行的选择,让多个小计时器检查与特定套接字相关的一些值,然后将它们发送回客户端,或者我应该使用一个循环遍历所有映射的大型计时器(房间)并在50ms时向每个房间发出所需的数据(房间内的玩家,定位,旋转和物体)

这是一个例子:

多个计时器(一个/插槽)

setInterval(function(){
      SYSTEMS[socket.shipData.systemId].players = [];
          //Players
          _.forEach(PLAYERS, function(player, key) {
              if(player.shipData.systemId === SYSTEMS[socket.shipData.systemId].id){

                  //Generating the packets to be sent
                  player.shipData.name = player.userName;
                  var player = player.shipData;

                  // var packet = player.shipData.replace(' ', '');
                  SYSTEMS[socket.shipData.systemId].players.push(player);
              }
          });
      io.to(SYSTEMS[socket.shipData.systemId].id).emit('heartBeat', SYSTEMS[socket.shipData.systemId]);
    },50);

一个单一计时器(循环遍历所有映射并向每个映射发送数据包)

setInterval(function(){
_.forEach(SYSTEMS, function(value, key) {
      SYSTEMS[value.id].players = [];
_.forEach(PLAYERS, function(player, key) {

    if(player.shipData.systemId === SYSTEMS[value.id].id){

        //Generating the packets to be sent
        player.shipData.name = player.userName;
        var player = player.shipData;
        SYSTEMS[value.id].players.push(player);
    }
});

//Emitting data to each sepparate system
io.to(SYSTEMS[value.id].id).emit('heartBeat', SYSTEMS[value.id]);
});
},1000/15);

0 个答案:

没有答案