Atualmente, estou fazendo um jogo MMORPG, baseado em turnos. O cliente deve executar no Android. Agora, meu amigo está fazendo os gráficos, e eu tenho feito as aulas de jogo (jogador, armamento, etc.). Agora, se a luta começar, as classes podem ser manipuladas por interfaces (na verdade, para meu parceiro, é como trabalhar com interfaces puras, ele não precisa de acesso às classes de implementação).
Agora precisamos introduzir um servidor de jogo para permitir vários jogadores. E algumas questões muito importantes surgem:
1) Devo copiar o modelo do jogo para o servidor completamente, sem deixar classes no cliente ou é melhor ter 2 cópias do modelo - 1 no servidor e 1 no dispositivo e concluir a sincronização periódica entre elas?
2) Qual método de conexão escolher entre o cliente e o servidor (o cliente à vista é o telefone Android)? Quanto ao servidor - estou me voltando para o java, porque tenho alguma experiência com ele. Mas agora a pergunta é: é melhor usar soquetes para esta tarefa ou eu posso usar serviços REST, ou até é possível conectá-lo de alguma forma ao servidor Java EE, o que é legal do meu ponto de vista, porque isso remove muita programação complicação? Mesmo que o jogo seja multiplayer, é baseado em turnos, portanto, não precisa ser renovado com muita frequência.
3) E o encadeamento? Todo cliente deve ter seu próprio segmento (no caso de soquetes)?
4) Existem livros sobre programação de jogos para servidores REAL MMORPG por aí ???
fonte
Concordou com Mikolaj não copia tudo. Envie o mínimo de dados possível. Você pode ter as mesmas classes (representando apenas o modelo de dados, não outros ativos) no cliente e no servidor, mas não as envie pela rede. Você deseja serializá-los no servidor e desserializar no cliente. O cliente deve enviar apenas comandos para o servidor.
Você está planejando um MMORPG baseado em turnos (não faz ideia de como isso funcionaria). Portanto, a velocidade não é um grande problema. Você pode usar qualquer tipo de serviço, o REST pode ser bom, é simples. Geralmente, os MMORPGs usam UDP (não seguro, menor, mais rápido) para coisas como atualizações de movimento em que um ou dois pacotes perdidos não importam e TCP (seguro, aéreo) para comunicação segura. A maioria dos jogos provavelmente usa algum tipo de protocolo personalizado criptografado e compactado sobre UDP e TCP para torná-lo rápido e difícil de decifrar.
Normalmente você deseja ter um conjunto de encadeamentos. Cada encadeamento do pool atende a uma solicitação e depois é reciclada. Quando você não possui threads suficientes, considere bloquear ou alocar mais threads.
Mikolaj já pesquisou isso por você ...
fonte