Servidor de jogos para um jogo de tabuleiro baseado em turnos Android / iOS

9

Atualmente, estou programando um jogo para iPhone e gostaria de criar um modo multiplayer online. No futuro, este aplicativo será porta para dispositivos Android, então eu queria saber como criar o servidor do jogo?

Em primeiro lugar, qual idioma devo escolher? Como tornar um servidor capaz de se comunicar com programas escritos em objetivo-c e Java?

Então, como efetivamente fazê-lo? É bom se eu abrir um soquete por cliente (haverá 2)? Que tipo de informação devo enviar para o servidor? para os clientes?

Cyril
fonte

Respostas:

7

Não pretendo iniciar uma guerra santa aqui, mas a maioria dos serviços de Internet (flickr, twitter, facebook e outros) tem descartado o SOAP em favor dos serviços da web RESTful e JSON como o formato serializado. Embora essencialmente os mesmos, os serviços REST contam com o método url e http para definir o que deve ser feito, por exemplo

GET /articles - list all articles
POST /articles - add a new article
PUT /articles/123 - update article 123 with new data

JSON - descrito em json.org - também é mais simples que XML e, embora talvez irrelevante, economize alguns bytes por solicitação. Seguindo o exemplo anterior, veja como um artigo seria descrito na notação JSON:

{ 
 "id": 123,
 "author": "Cyril",
 "content": "Hello, this is an article",
 "tags": [ "gamedev", "webservices", "multiplayer" ] 
}

Para o IOS, existe este belo artigo http://petermcintyre.wordpress.com/2010/11/04/consume-json-rest-in-ios/, que menciona http://code.google.com/p/json-framework / para analisar e gerar os dados.

Sendo baseado em turnos, você pode confiar em sessões http no servidor para manter o estado, portanto, não há necessidade de manter uma conexão de soquete persistente com o servidor. Qualquer linguagem do lado do servidor suporta isso (php, python, java, etc).

Essa arquitetura permite escalar horizontalmente (adicionando mais servidores) de maneira transparente.

guigouz
fonte
4

Como seu jogo será baseado em turnos, as atualizações em tempo real não são super importantes. A maneira mais fácil de fazer isso é usar um servidor já construído, eu usaria um servidor web. Qualquer plataforma que valha a pena portar seu jogo deve facilitar o acesso a serviços da web localizados em um servidor da web.

Para fornecer atualizações quase em tempo real, eu recomendo que você examine as pesquisas longas. O código nesse link fornece a implementação mais básica de pesquisas longas do lado do servidor. Mas o ponto principal é que, uma vez que uma solicitação é feita a um recurso, o servidor executa uma chamada de bloqueio até que os dados solicitados se tornem disponíveis. Então você repete o processo novamente e novamente.

Em termos de quais dados você deve enviar de volta, sempre trate o cliente como hostil. O cliente deve enviar qualquer que seja seu "estado de virada", o servidor o valida e, se tudo der certo, ele envia o novo "estado de jogo" de volta a todos os clientes conectados.

-

Os serviços web SOAP são provavelmente o melhor local para iniciar ( link ), são fáceis de iniciar e a maioria das estruturas da web fornece um método para expô-los. Você também pode procurar serviços RESTful, mas eles geralmente deixam um pouco mais do processo de serialização para o consumidor.

Para consumir serviços Web SOAP no Android, eu procuraria aqui .

Nate
fonte
Olá e obrigado pela sua resposta. Mas ainda não entendo como enviar dados para meu serviço da web? como serializar a entrada do usuário (aqui um movimento no meu tabuleiro 8 * 8, por exemplo: jogador 1 de [0,0] para [1,1]) e depois como serializar o estado do jogo?
Cyril
Verifique os dois links que eu adicionei. Eles devem começar com os serviços da web SOAP, que provavelmente são a maneira mais simples de começar.
Nate
Para Android e iOS, você não precisa usar pesquisas longas. O Apple Push Notifications ou o Google Cloud Messaging permitem enviar dados do servidor para seus dispositivos.
Matt
2

Eu acho que usar SOAP ou mesmo HTTP é um exagero. Apenas defina seu próprio protocolo através de conexões TCP baunilha. Por exemplo, interprete cada linha de texto enviada como um comando. Defina quais comandos / respostas o cliente e o servidor podem enviar.

O FICS funciona dessa maneira e atende milhares de jogadores de xadrez há muitos anos. O IRC também funciona dessa maneira (consulte a RFC 1459).

mdm
fonte
HTTP oferece várias vantagens, no entanto: ele pode usar proxies, é quase nunca firewall, oferece criptografia perto transparente usando HTTPS, tem vários métodos de autenticação ...
Sam Hocevar