Сообщение от Nikich
Использую node.js + socket.io. Опыта до это вообще не имел, поэтому хочу послушать критики, так как уверен, что мой подход в разработке архитектуры сервера неверен.
|
Потчи "верный"..
Сообщение от Nikich
1).Клиент каждый фрейм отсылает на сервак данные о нажатых клавишах.
|
Если это нажатие WASD то у тебя два числа (вектор) направления. Слать нужно только когда они меняются. Например по стандарту вектор [ 0, 0 ], при нажатии D будет [ 1, 0 ], и только когда вектор меняется шли его.
Сервер же просто помнит направление перемещения, и если считает что юнит может двигаться - перемещает.
Если например нужно слать куда мы целимся, то тут слать нужно не чаще чем раз в 100/200 мс, это не критическая инфа, клиенты интерполируют.
Все зависит от механики перемещения и управления, опиши больше.
Сообщение от Nikich
2).Клиент слушает о приходе инфы с сервера касательно игровых объектов и делает следующее: старые данные пихает в P0, новые в P1.
|
Я обычно не храню старые. Для простоты проще иметь "текущие" и "новые". Вот есть текущая позиция, и двигаем к новой, если слишком далеко, то ускоряем, если совсем все "плохо", "варпим".
Сообщение от Nikich
3).Юзается линейная интерполяция по известным P1 и P0.
|
Если игра real-time с взаимодействием между игроками и зависимостью от положения, например FPS или шустрый Top Down, то прийдется учиться экстраполировать, иначе никто не будет попадать по врагам если у них лаг высокий.
Сообщение от Nikich
4).Сервак каждые 16 миллисек обрабатывает нажатие клавиш и игровую логику.
|
Зависит от механики игры, но даже FPS так часто не нужно. Логику лучше считать максимум 20 раз в секунду, а если это не супер активный экшон, то вообще можно 10 раз в секунду.
Сообщение от Nikich
5).Сервак каждые 48 миллисек отправляет все игровые данные всем клиентам.
|
Шли дельта данные позиций и т.п. также часто как и обновляешь их. При этом думай как пакуешь. JSON для начала ок, но потом нужно бинарно будет паковать.
Многие данные такие как присоединение игрока, или кто-то умер и т.п. не шли с данными обновления, а шли как независимые пакеты, простой event.
Опиши больше о игровой механики, т.к. обычно все зависит от нее.
Сообщение от radiobutton
Кстати, можете объяснить зачем нужны все эти node.js и прочие если есть java ?
|
И как твоя java решит вопросы заданные топик-стартером? Java в таких вещах сосет ты не представляешь как..