O host do jogo deve ser a autoridade ou outro cliente burro?

15

Ao projetar um jogo multiplayer em rede em que um jogador hospeda e outros se conectam, há duas estratégias que eu conheço:

  • Faça com que o jogo do jogador anfitrião seja a autoridade , com todos os outros jogadores como clientes idiotas tentando acompanhar o estado do jogo atual. No código, haverá muitos casos especiais, dependendo se o jogador atual é o host ou não.
  • Torne o host um cliente burro, como todo mundo, executando um servidor dedicado oculto em outro thread. O servidor dedicado será a autoridade e o host se conectará a ele como todos os outros (por meio do host local).

Quais são as vantagens / desvantagens de cada uma delas? Qual é o mais usado (ou varia de acordo com o tipo / tamanho do jogo)?

BlueRaja - Danny Pflughoeft
fonte
O primeiro caso que você está descrevendo pode ser uma forma de rede P2P (com um cliente autorizado) e geralmente é muito mais complexa e mais difícil de implementar e manter.
Akaltar

Respostas:

13

A abordagem do cliente burro é melhor do ponto de vista do design puro - limita bastante a quantidade de código diferente que você precisa entre o host e os clientes e permite que o servidor seja executado de forma assíncrona. A desvantagem é que a máquina do host exige recursos extras - mas acho que sempre exigiu.

DeadMG
fonte
8

Entre essas duas opções, a abordagem do cliente burro é certamente a melhor pelas razões mencionadas pelo DeadMG.

Existe outra opção que torna cada cliente uma autoridade: ela tem a vantagem do cliente burro de que todos os colegas compartilham o mesmo código. A outra vantagem é que pode ser muito mais justo se você definir as regras corretas, porque ninguém tem a vantagem de 0 lag para o servidor.

É claro que isso pode ser bastante complicado de implementar, dependendo do tipo de jogo. Seu protocolo terá que lidar com a solução de conflitos entre colegas, provavelmente usando algum tipo de esquema de propriedade. Deixando apenas os conflitos em que dois pares reivindicam a propriedade do mesmo objeto de jogo.

Os protocolos multijogadores ponto a ponto do Google podem fornecer mais detalhes sobre essa abordagem.

Tinco
fonte
11
gamedev.stackexchange.com/questions/3887/... Aqui está um pouco mais informações :)
michael.bartnett
Interessante. Esse post afirma que é assim que "a maioria dos títulos de estratégia" implementa a rede. Isso é mesmo verdade? É assim que, por exemplo. Command and Conquer e Starcraft funcionam?
BlueRaja - Danny Pflughoeft
@BlueRaja, é assim que Starcraft funciona, sim. No Starcraft não há autoridade alguma. Warcraft III e Starcraft II têm um modelo de troca de mensagens mais centralizado, manuseio de atraso e desconexão, mas fundamentalmente o mesmo em que cada cliente hospeda seu próprio estado de jogo.
Rotsor 28/05
A outra vantagem desse modelo de rede é que ele permite suportar um grande estado mundial compartilhado e consistente com tráfego mínimo de sincronização.
Rotsor 28/05
A maior desvantagem desse modelo é a vulnerabilidade inerente ao "maphacking", que está revelando alguns dados do estado do jogo que o jogador normalmente não pode ver.
Rotsor 28/05