所以我正在使用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);