@Padaboo

Как написать игровой сервер?

Доброго времени суток! В голову пришла мысль создать игру на Java, так как играть одному неинтересно - игра будет многопользовательска.
Движок выбран Jmonkey на базе jogl.
В голову приходит клиент серверная архитектура с небольшими поправками - из того что я нашел в интернете:
1. Клиент посылает сообщения на сервер.
2. Сервер их принимает и оповещает остальных игроков - изменение координат, нажатие клавиш, etc.

Тут у нас сходу появляется несколько проблем:
1. У всех разная скорость соединения нужно как то делать поправку на пинг, даже не знаю как можно сделать корректировку.
2. Непрерывный флуд, пользователи асинхронно посылают сообщения на сервер и при каждом сообщении нужно оповещать всех остальных игроков.
Решение: 1) посылать сообщения не каждый раз при нажатии, а по таймауту. 2) На сервере составлять очереди сообщений и высвобождать их одновременно, так же по таймауту.
3. Игрок нажал кнопку ходить и начал двигаться в определенном направлении у себя на клиенте, но сообщение еще не поступило на сервер и к другим игрокам тут у нас происходит рассинхронизация, пока сервер не будет оповещен и другие игроки не получат его новые действия и координаты с поправками.
Если кто то сталкивался с такими проблемами в играх или в подобных приложениях.
Подскажите направление решения задачи, какие еще проблемы могут встретится в подобной архитектуре. Спасибо.
  • Вопрос задан
  • 1083 просмотра
Решения вопроса 1
saboteur_kiev
@saboteur_kiev
software engineer
Обратите внимание, что свободное перемещение доступно в играх с небольшим онлайном.
В играх с большим онлайном, типа линейка/вов, у вас не свободное перемещение а подача команды "бежать на координаты x,y", атаковать противника z
следовательно не так много информации нужно передавать о каждом игроке.

Пинг вообще не причем - у сервера крутится внутренний цикл событий, который обрабатывает все действия с определенной скоростью.
Выбирается минимальное время S, за которое в игровом мире может происходить какое-то действие. Все действия основываются на этом времени (каст заклинания 3s, пройти по горизонтали 1 шаг 1S, пробежать 3 шага 1S)

Как пришел на сервер пакет от игрока с командой, так сервер и начал ее выполнять. А на клиенте уже можно отрисовывать действия более плавно.

А вообще, у вас вопросы такого уровня, что возможно стоит подучиться на более простых вещах. напишите для начала чат, или простенький MUD
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Padaboo Автор вопроса
я посрчитал что если мы имеем 100 игроков в локации то за единицу времени нужно будет отправить (100-1)*100 = 9900 сообщений - те самые over 9000
Ответ написан
Vampireos
@Vampireos
https://vk.com/axelaredz
Никогда не понимал людей которые жаждут делать, что то на атомном уровне.
Подбирая каждый атом по цвету, весу и вкусу)
Когда рядом лежит палка, железка и клин, чтобы сделать топор)

kbengine.org
https://github.com/gamestdio/colyseus
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы