1) A arquitetura ponto a ponto conecta cada jogador diretamente aos outros, gerando O(n2) conexões no total e banda constante para todos.
2) A autoridade pode ser atribuída a alguns pontos ou compartilhada entre todos através de simulação.
3) A latência tende a ser menor que em arquitetura cliente-servidor, mas é necessário manter a sincronização entre os pontos.
2. Arquitetura Ponto a Ponto
● Cada jogador está conectado com todos os demais
● Ou seja, para n jogadores, haverá O(n²) conexões no total
● Ou seja: A banda aumenta muito com mais jogadores, mas é
sempre a mesma para todos os jogadores.
Topologia Ponto a Ponto
3. Autoridade● Conceito de autoridade é mais nebuloso… Possíveis
abordagens:
1) Atribuir a alguns pontos a autoridade para certas partes do
sistema (pode ser mais complexo, na prática);
2) Compartilhar ações entre todos, e cada ponto faz a
“simulação” (Modelo mais comum, chamado de
compartilhamento de input)
4. Latência
● Latência tende a ser menor que em Cliente ↔ Servidor (pois
não há ninguém para intermediar a comunicação)
● Mas ainda há latência… Logo, outro desafio: manter todos os
pontos sincronizados...
5. Sincronização entre os pontos
● Possível solução: enfileirar comandos por um período de
tempo (exemplo: Age of Empires [200ms])
● Implementação do jogo precisa ser totalmente determinística
Simulação determinística em rede (latência de 100ms e 1% perda de pacotes)
fonte: http://gafferongames.com/networked-physics/deterministic-lockstep/
6. Conectando novos jogadores
● Em teoria, um novo jogador poderia se conectar a qualquer um
● Na prática, usa-se um ponto “mestre”, responsável por recepcionar novos
jogadores
● Quando a conexão é perdida, o jogo pode pausar por alguns segundos
antes de excluir o jogador desconectado
7. Robo Cat RTS (Real Time Strategy)
● Suporta até 4 jogadores
● Cada jogador controla 3 gatos
● Para controlar um gato, deve-se clicar com o botão esquerdo sobre ele e com o botão direito no
destino
● Se o destino for uma posição, move o gato para lá
● Se o destino for outro gato inimigo, o gato se aproxima e começa a atacá-lo (jogando bolas)
8. Robo Cat RTS – Novos Jogadores
● Usa o modelo de ponto master
● O novo jogador envia um pacote “Olá” para o master, que pode responder:
● Mensagem de Boas Vindas contendo: ID do jogador, número de
jogadores, e endereços IP dos demais jogadores
● Mensagem “Not Joinable”: O jogo já começou ou já está lotado
● Mensagem “Not Master”: Caso a mensagem é enviada para o ponto
errado
● Novo Jogador envia pacote de Introdução para os demais jogadores (ID e
nome)
9. Jogadores de redes diferentes
● Um novo ponto C, fora da rede local, entra no jogo
● O ponto mestre A informa o endereço IP do ponto B
● Mas o endereço local de B não é visível para C
● Como resolver esse problema?
10. Jogadores de redes diferentes
● Mas o endereço local de B não é visível para C
● Como resolver esse problema?
● Resposta: Usa-se um servidor de encontro (Rendezvous) na
primeira conexão entre os pontos, para que todos usem IPs globais
11. Jogadores de redes diferentes
● Mas o endereço local de B não é visível para C
● Como resolver esse problema?
● Resposta: Usa-se um servidor de encontro (Rendezvous) na
primeira conexão entre os pontos, para que todos usem IPs globais
● Outra opção: Usar um servidor central para todo o tráfego de rede
● Vantagem: Segurança, pois ninguém sabe o IP público dos demais
pontos. Não é possível derrubar outro cliente com ataque de denial
of service
● Desvantagem: Requer um servidor mais poderoso
12. Compartilhamento de Comandos e
Lockstep turns
● Arquitetura semelhante ao Age of Empires
● Cada turno leva 100 ms (10 turnos por segundo)
● Cada ponto simula o jogo inteiro
● Objetos não são replicados, mas sim os pacotes de turno (comandos)
● Um ponto empilha os comandos e envia para todos os outros pontos
ao fim do turno (de 100ms)
13. Exercício
● Defina uma arquitetura Ponto a Ponto para o Robo Cat RTS
usando Unity LLAPI (por simplicidade, considere apneas rede
local).
● Qual QoS você deve usar para o canal de comunicação?
● Qual é o formato da mensagem que será trocada durante os
turnos?
● Como você vai sincronizar a execução dos turnos entre os
pontos?
● Se você usar números aleatórios para alguma animação,
como você vai sincronizá-los?
Dica: tome o modelo do Age of Empires
Dica 2: Desenhe modelos se achar necessário (Máquina
de estados ou diagrama de sequências)