[Закрытое] Кодирование Клиента/сервера MMORPG

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

13
задан user21826 13 June 2013 в 14:03
поделиться

9 ответов

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

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

Так или иначе, комбинация UDP и TCP была бы соответствующей - просто необходимо ли спросить себя, "Я хочу надежность или скорость?"

8
ответ дан 1 December 2019 в 23:16
поделиться

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

  1. клиент связывается с сервером, который игрок хочет переместить.
  2. дисплеи клиента плеер, перемещающийся согласно тому, что это думает, должен произойти.
  3. сервер проверяет это, перемещение - что-то, что могло произойти, учитывая местоположение плеера.
  4. сервер обновляет клиент как, туда, где плеер, что касается сервера.
  5. клиент обновляет положение плееров для отражения worldstate сервера.
4
ответ дан 1 December 2019 в 23:16
поделиться

На половину Вашего вопроса (используемые протоколы транспортного уровня) можно было ответить путем установки wireshark и рассмотрения трафика.

1
ответ дан 1 December 2019 в 23:16
поделиться

Я думаю, что можно учиться много от чтения, как другие реализовали эти типы систем. В этом тщетном, может я указывать на Вас на работу Tim Sweeney и Консорциум Крокета

  1. Архитектура сетевых соединений Unrea
  2. , бумаги Tim Sweeney Проекта

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

1
ответ дан 1 December 2019 в 23:16
поделиться

Можно интересоваться Darkstar Проекта. Это - платформа MMO с открытым исходным кодом.

1
ответ дан 1 December 2019 в 23:16
поделиться

Ваш лучший выбор состоит в том, чтобы, вероятно, смотреть на сетевой код Planeshift, это - MMO с открытым исходным кодом. Я полагаю, что это наиболее разработано на сцене (в последний раз, я проверил).

0
ответ дан 1 December 2019 в 23:16
поделиться

Я не знаю деталей кроме наблюдений, поскольку плеер, но большая часть игры совершенно определенно не ожидают сервера, отвечают для перемещения символа, который уничтожил бы пользовательский опыт, если это не было основано на повороте. То, что похоже, происходит, перемещение, сделан клиентский и отправленный на сервер, который тогда отправляет те сообщения другим плеерам. По крайней мере, в, Ничего себе, если плеер отстает, можно видеть их все еще продвигающийся, тогда волшебно появляются в другом местоположении позже, которое говорит мне, что клиент получает больше, чем данные местоположения, но также и что они перемещаются и направление, они перемещали и затем экстраполируют перемещение в отсутствие дальнейших данных.

0
ответ дан 1 December 2019 в 23:16
поделиться

Вы не можете полагаться на клиент для передачи в правдивой информации. Кто-то взломает протокол и обман. Шифрование данных не остановится, это - просто делает его немного тяжелее, чтобы сделать.

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

, Если игра должна быть 'в реальном времени' тогда, клиент должен предположить, что сервер будет позволять запросы перемещения и обновлять дисплей соответственно - и откатывать перемещение, если сервер исправит его позже. При большинстве условий согласится клиент и сервер, и все будет течь гладко. Они не согласуют, когда клиент попытается обмануть (который является их отказом так или иначе) - или клиент отстает плохо из-за плохого соединения (не очень, можно сделать об этом).

4
ответ дан 1 December 2019 в 23:16
поделиться

Я не думаю, что существует краткий единственный ответ на этот вопрос, это довольно широко в своем объеме. Однако, несколько точек:

  • нет никакой потребности "широковещательно передать" просто, потому что Вы используете UDP. UDP точка-точка большую часть времени, по моему опыту.
  • совершенно возможно сделать Вашу собственную "безопасную" связь по UDP, Вы не должны использовать TCP. Это не волшебно, просто... умно и сложно.:), Но по большей части, как Вы подразумеваете, TCP не подходит для связи оперативного выхода в играх.
  • существуют способы сделать TCP более подходящим, поиск "алгоритма Nagle", например.
  • можно сделать чат по UDP, если Вы уже прокрутили свой собственный транспортный протокол без потерь сверху его. Много игр к этому.

были статьи о сетях в Gamasutra, но у меня нет ссылок удобными прямо сейчас. Не когда-либо уверенный, если они все еще открыто доступны, извините.

0
ответ дан 1 December 2019 в 23:16
поделиться
Другие вопросы по тегам:

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