Должен ли хозяин игры быть авторитетом или другим тупым клиентом?

15

При разработке сетевой многопользовательской игры, в которой один игрок размещается, а другие соединяются, я знаю две стратегии:

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

Каковы преимущества / недостатки каждого из них? Что используется чаще всего (или зависит от типа / размера игры)?

BlueRaja - Дэнни Пфлугхофт
источник
Первый описываемый вами случай может представлять собой одну из форм P2P-сетей (с одним авторитетным клиентом), которая обычно намного сложнее и сложнее в реализации и обслуживании.
Акалтар

Ответы:

13

Подход «тупой клиент» является лучшим с точки зрения чистого проектирования - он сильно ограничивает объем различного кода, необходимого между хостом и клиентами, и позволяет серверу работать асинхронно. Недостатком является то, что машине хоста требуются дополнительные ресурсы, но, думаю, так было всегда.

DeadMG
источник
8

Между этими двумя вариантами подход «тупой клиент», безусловно, является лучшим по причинам, упомянутым DeadMG.

Есть еще одна опция, которая делает каждого клиента авторитетом, он имеет преимущество тупого клиента в том, что все равноправные узлы совместно используют один и тот же код. Другое преимущество состоит в том, что было бы намного более справедливо, если бы вы установили правильные правила, потому что никто не имеет преимущества с задержкой на сервере.

Это может быть довольно сложно реализовать в зависимости от типа игры. Вашему протоколу придется иметь дело с разрешением конфликтов между коллегами, возможно, используя какую-то схему владения. Оставляя только конфликты, когда 2 пира претендуют на владение одним и тем же игровым объектом.

Googling Peer-2-Peer многопользовательские протоколы могут дать вам более подробную информацию об этом подходе.

Tinco
источник
1
gamedev.stackexchange.com/questions/3887/… Вот еще немного информации :)
michael.bartnett
Интересный. В этом посте утверждается, что именно так «большинство стратегий» внедряют сети. Это правда? Это как например? Command and Conquer и Starcraft работают?
BlueRaja - Дэнни Пфлугхофт
@BlueRaja, так работает Starcraft, да. В Starcraft вообще нет авторитета. Warcraft III и Starcraft II имеют более централизованную модель обмена сообщениями, обработку лагов и отключений, но в основном одинаковы в том, что каждый клиент имеет свое собственное игровое состояние.
Роцор
Другое преимущество этой сетевой модели заключается в том, что она позволяет поддерживать большое согласованное состояние общего мира с минимальным трафиком синхронизации.
Ротсор
Самым большим недостатком этой модели является ее внутренняя уязвимость к «взламыванию карт», то есть к раскрытию некоторых данных о состоянии игры, которые игрок обычно не может видеть.
Роцор