Serveur de jeu pour un jeu de société au tour par tour Android / iOS

9

Je programme actuellement un jeu iPhone et je souhaite créer un mode multijoueur en ligne. À l'avenir, cette application sera portée sur des appareils Android, donc je me demandais comment créer le serveur de jeu?

Tout d'abord, quelle langue dois-je choisir? Comment rendre un serveur capable de communiquer à la fois avec des programmes écrits en objective-c et Java?

Alors, comment le faire efficacement? Est-ce bien si j'ouvre un socket par le client (il y en aura 2)? Quel type d'informations dois-je envoyer au serveur? aux clients?

Cyril
la source

Réponses:

7

Je ne veux pas commencer une guerre sainte ici, mais la plupart des services Internet (flickr, twitter, facebook et autres) ont abandonné SOAP au profit des services Web RESTful et JSON comme format sérialisé. Bien qu'ils soient essentiellement les mêmes, les services REST s'appuient sur la méthode url et http pour définir ce qui doit être fait, par exemple

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

JSON - décrit dans json.org - est également plus simple que XML, et peut-être pas pertinent, vous économisera quelques octets par demande. En suivant l'exemple précédent, voici comment un article serait décrit en notation JSON:

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

Pour l'IOS, il y a ce bel article http://petermcintyre.wordpress.com/2010/11/04/consume-json-rest-in-ios/ qui mentionne http://code.google.com/p/json-framework / pour l'analyse et la génération des données.

Au tour par tour, vous pouvez compter sur les sessions http sur le serveur pour maintenir l'état, il n'est donc pas nécessaire de conserver une connexion socket persistante au serveur. Tout langage côté serveur prend en charge cela (php, python, java, etc.).

Cette architecture vous permet d'évoluer horizontalement (en ajoutant plus de serveurs) de manière transparente.

guigouz
la source
4

Étant donné que votre jeu va être au tour par tour, les mises à jour en temps réel ne sont pas super importantes. La façon la plus simple de le faire est d'utiliser un serveur déjà construit, j'irais avec un serveur web. Toute plateforme digne de porter votre jeu devrait faciliter l'accès aux services Web situés sur un serveur Web.

Afin de fournir des mises à jour en temps quasi réel, je vous recommande de vous pencher sur les longs sondages. Le code sur ce lien fournit l'implémentation la plus élémentaire de l'interrogation longue du côté serveur. Mais l'essentiel est qu'une fois qu'une demande est faite à une ressource, le serveur exécute un appel de blocage jusqu'à ce que les données demandées deviennent disponibles. Ensuite, vous répétez le processus encore et encore.

En termes de données à renvoyer, traitez toujours le client comme hostile. Le client doit envoyer quel que soit son "turn-state", le serveur le valide, puis si tout est vérifié, il renvoie le nouvel "game-state" à tous les clients connectés.

-

Les services Web SOAP sont probablement le meilleur endroit pour commencer ( lien ), ils sont faciles à démarrer et la plupart des cadres Web fournissent une méthode pour les exposer. Vous pouvez également vouloir examiner les services RESTful, mais ils laissent généralement un peu plus de processus de sérialisation au consommateur.

Pour consommer des services Web SOAP sur Android, je regarderais ici .

Nate
la source
Salut et merci pour votre réponse. Mais je ne comprends pas encore comment envoyer des données à mon service Web? comment sérialiser l'entrée utilisateur (ici un mouvement dans ma carte 8 * 8 par exemple: joueur 1 de [0,0] à [1,1]) et ensuite comment sérialiser l'état du jeu?
Cyril
Vérifiez les deux liens que j'ai ajoutés. Ils devraient vous aider à démarrer avec les services Web SOAP, qui est probablement le moyen le plus simple de commencer.
Nate
Pour Android et iOS, vous ne devriez pas avoir besoin d'utiliser une longue interrogation. Les notifications push Apple ou la messagerie Google Cloud vous permettront de transférer des données du serveur vers vos appareils.
Matt
2

Je pense que l'utilisation de SOAP ou même de HTTP est exagérée. Définissez simplement votre propre protocole sur des connexions TCP vanille. Par exemple, interprétez chaque ligne de texte envoyée comme une commande. Définissez les commandes / réponses que le client et le serveur sont autorisés à envoyer.

Le FICS fonctionne de cette façon et il sert des milliers de joueurs d'échecs depuis de nombreuses années. IRC fonctionne également de cette façon (voir RFC 1459).

mdm
la source
HTTP offre cependant plusieurs avantages: il peut utiliser des proxys, il n'est presque jamais pare-feu, il offre un cryptage presque transparent en utilisant HTTPS, a plusieurs méthodes d'authentification ...
sam hocevar