Bem, existe este livro - que é um pouco antigo agora, e eu nunca o li realmente, mas é de uma editora respeitável. Eu também encontrei este , que é mais novo, mas nunca ouvi falar disso antes. Ambos pretendem cobrir problemas de desenvolvimento de jogos MMO (ou pelo menos on-line); dito isso, a previsão do lado do cliente é mais ou menos a mesma, independentemente da escala da sua base de jogadores simultâneos, e o Google tem muitas informações sobre isso .
É importante perceber que, de uma perspectiva prática, é bastante difícil para um desenvolvedor independente de hobby / hobby montar um jogo que seja popular o suficiente para reunir jogadores suficientes para alcançar uma simultaneidade teórica de pico alta o suficiente para ser considerada "maciça". Mas as técnicas ainda podem ser educativas para a pesquisa.
Existem duas classificações principais de coisas que você pode fazer:
- Seja agressivo ao enviar apenas a quantidade mínima de dados para o conjunto mínimo de clientes que precisam deles.
- Crie um jogo que não incentive os jogadores a se amontoar demais, ajudando a manter o "conjunto de clientes que precisa" de coisas pequenas em geral.
O segundo é realmente um problema de design de jogo e manipulação social - é especialmente complicado porque os jogos multiplayer são naturalmente sociais, isso faz parte do seu apelo, então você não deseja desencorajar demais grupos de jogadores. Por outro lado, um jogo no qual todos no mundo estão acampando, o único jogador que faz o melhor saque no jogo será difícil de escalar.
Para a primeira opção, você pode considerar fazer mensagens em camadas - há algumas coisas sobre outros jogadores que são sempre importantes saber, como posições. Mas outras coisas, como saúde, podem não ser tão importantes para objetos que o jogador atual ainda não pode ver; portanto, você bloqueia o que envia para esse jogador com base na distância relativa de todas as outras entidades na vizinhança - isso é essencialmente uma limitação os dados que você envia, como você mencionou na última parte da sua pergunta, além de filtrá-los.
Arquiteturas multiplayer em grande escala também armazenam em buffer relatórios que não precisam ser executados imediatamente. As mensagens de salvamento de caracteres enviadas ao servidor podem ser feitas em deltas, com atualizações completas apenas em pontos críticos, e essas atualizações podem ser armazenadas em buffer em um servidor de limitação, para que sejam enviadas ao servidor que realmente mantém os dados de caracteres em constante, moda periódica - à medida que sua base de jogadores é escalada, você precisa se preocupar em otimizar a IO do disco e o tráfego da rede. Você não quer fazer com que seu banco de dados de personagens se debata.
A taxa e o tamanho dos pacotes diferem amplamente de jogo para jogo, da mesma forma que para jogos que não são MMO. É realmente uma coisa muito específica de requisitos e não há padrões generalizados.
Além da resposta acima, leia sobre TCP_NODELAY e como o dimensionamento da janela funciona. Compreender os detalhes do TCP (e sim, você deseja usar o TCP e não o UDP, a menos que a perspectiva de lidar com atualizações diferenciais que cheguem fora de ordem lhe pareça divertida) e a retransmissão seja crítica para o controle da latência.
fonte