Получение данных клиенту в Java MMO - PullRequest
1 голос
/ 22 февраля 2010

Я пытаюсь сделать онлайн-MMO на Java. Это будет простой, где вы получите персонажа и сможете перемещаться и стрелять в других игроков, все в 2D сверху вниз. Сервер будет многопоточным и на Java, а клиент также будет на Java. Клиент отправит все пользовательские данные на сервер, а сервер обработает всю логику (движение игроков, врагов и т. Д.) И отправит местоположения обратно клиенту. В любом случае, как лучше всего передать клиенту всю информацию о местонахождении всех врагов и игроков? Будет ли лучший способ сделать это - поместить все данные в объект, сериализовать их, записать в сокет и десериализовать их на стороне клиента?

1 Ответ

4 голосов
/ 22 февраля 2010

Обычно вы отправляете обновления двумя способами:

  1. Вы регулярно транслируете быстро меняющееся, но менее важное состояние, такое как позиции объекта, так часто, как это необходимо (например, несколько раз в секунду)
  2. Вы отправляете уведомление о важных событиях, когда они происходят.

Сериализация данных на сервере и отправка их клиенту - это нормально, но отправляйте только то, что вам нужно, и не используйте типы данных большего размера, чем необходимо. В будущем вам, возможно, придется подумать о библиотеках сериализации сторонних производителей, которые, возможно, более производительны или имеют более компактное представление, но сейчас вы немного отошли от этого. Вам также нужно будет подумать, что делать, когда отправляемый объект каким-либо образом меняет формат; это сломает старых клиентов?

Одной из основных задач сервера является обеспечение того, чтобы вы отправляли сообщения только тем людям, которые действительно в них нуждаются; это обычно делается как минимум проверкой расстояния. Вы также можете проверить, нужно ли вообще что-то отправлять; если объект не перемещался с прошлого раза, нет необходимости повторно транслировать свою позицию.

Клиент-сервер - это другое дело: если вы слепо десериализуете отправленные вами объекты, то хакеры могут причинить вам боль. Планируйте безопасность с самого начала. Пусть клиент отправит вам простые данные, которые легко проверить и проверить, и выбросит все подозрительные данные, которые вы получили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...