#javascript #node.js
#javascript #node.js
Вопрос:
Итак, я создаю приложение (игру) в реальном времени с использованием NodeJS websockets. Существует несколько карт, на каждой из которых есть объекты и игроки, которые всегда должны синхронизироваться.
Я решил использовать несколько таймеров (один интервал для каждого подключенного сокета) вместо использования одного большого таймера, который отправляет пакеты подключенным пользователям в определенных комнатах.
Мой вопрос: является ли это жизнеспособным вариантом иметь несколько небольших таймеров, которые проверяют некоторые значения, связанные с конкретным сокетом, а затем отправляют их обратно клиенту, или я должен использовать один большой таймер, который перебирает все карты (комнаты) и выдает необходимые данные (игроки в комнате,позиционирование, вращение и объекты) в каждую комнату раз в 50 мс
Это примеры:
Несколько таймеров (один / сокет)
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);
Комментарии:
1. Зачем вам это нужно
Interval
?2. Я использую интервал в качестве сердцебиения для отправки пакетов клиентам, но я открыт для других идей
3. Если у вас есть сокет, отправляйте данные при изменении любых соответствующих данных… Имеет смысл?
4. Имеет смысл, если я знаю, какие данные были изменены и на какой карте, но мне не удалось найти какого-либо глубокого наблюдателя, который уведомляет, когда что-то было изменено
5. Это API, который вы разработали, который изменяет данные?