Сейчас у меня есть 2D tds шутер для браузера. На сервере нода, для физики использую 2D движок MatterJs. Сейчас реализованы простые механики: синхронизация движений игроков, стрельба, магазин.
На данный момент код сервера имеет такую структуру:
var gameObjects={players:{},walls:{},bases:{}}; // здесь хранится инфа о игроках и других объектах
// launch game cycle
setInterval(function(){
Matter.Engine.update(engine, engine.timing.delta); //обновление физики
},1000/60)
io.on('connection', function (socket) {
socket.player=createPlayer(socket);
socket.on("....",function(){});
socket.on("....",function(data){});
socket.on("....",function(data){});
socket.on("....",function(data){});
socket.on("....",function(data){});
socket.on("....",function(data){});
});
И вот вопрос. Как реализовать комнаты(сессии)? Придумал такой вариант:
var rooms=[
{players:{},walls:{},bases:{},engine:setInterval(...,1000/60)},
{players:{},walls:{},bases:{},engine:setInterval(...,1000/60)},
{players:{},walls:{},bases:{},engine:setInterval(...,1000/60)}
]
Допустим, что в одной комнате может быть maxN игроков, если N игроков > maxN, то закидывать в следующую комнату.
И один вопрос не по теме. Надо ли как-то распределять нагрузку на сервер? Потоки и т.д?