При разработке сетевой многопользовательской игры, в которой один игрок размещается, а другие соединяются, я знаю две стратегии:
- Пусть игра хост-игрока будет авторитетом , а все остальные игроки, как тупые клиенты, будут пытаться догнать текущее игровое состояние. В коде должно быть много особых случаев, в зависимости от того, является ли текущий игрок хостом или нет.
- Сделайте хост тупым клиентом, как и все остальные, запустив скрытый выделенный сервер в другом потоке. Выделенный сервер будет полномочным, и хост подключится к нему, как и все остальные (через localhost).
Каковы преимущества / недостатки каждого из них? Что используется чаще всего (или зависит от типа / размера игры)?
game-design
networking
multiplayer
BlueRaja - Дэнни Пфлугхофт
источник
источник
Ответы:
Подход «тупой клиент» является лучшим с точки зрения чистого проектирования - он сильно ограничивает объем различного кода, необходимого между хостом и клиентами, и позволяет серверу работать асинхронно. Недостатком является то, что машине хоста требуются дополнительные ресурсы, но, думаю, так было всегда.
источник
Между этими двумя вариантами подход «тупой клиент», безусловно, является лучшим по причинам, упомянутым DeadMG.
Есть еще одна опция, которая делает каждого клиента авторитетом, он имеет преимущество тупого клиента в том, что все равноправные узлы совместно используют один и тот же код. Другое преимущество состоит в том, что было бы намного более справедливо, если бы вы установили правильные правила, потому что никто не имеет преимущества с задержкой на сервере.
Это может быть довольно сложно реализовать в зависимости от типа игры. Вашему протоколу придется иметь дело с разрешением конфликтов между коллегами, возможно, используя какую-то схему владения. Оставляя только конфликты, когда 2 пира претендуют на владение одним и тем же игровым объектом.
Googling Peer-2-Peer многопользовательские протоколы могут дать вам более подробную информацию об этом подходе.
источник