2010-03-01 2 views
0

Je travaille sur une application iPhone multijoueur qui permet à 6 utilisateurs de se connecter et de jouer en "temps réel". J'ai regardé des serveurs socket hébergés et non hébergés (SmartFox, ElectroServer, Photon/Neutron, ProjectDarkstar) et je me demande si quelqu'un a des recommandations pour les services ou la mise en œuvre? Quelqu'un a-t-il une idée de ce qu'un jeu comme Zynga's Live Poker utilise pour ce type de fonctionnalité ou de quel type de matériel vous pourriez avoir besoin?Serveur multi-joueurs pour application iPhone, utilisant un périphérique comme serveur socket

Quelques sous-questions:

  1. Le jeu est tour par tour. Serait-il plus logique d'utiliser AMF et d'interroger un serveur ou devrais-je opter pour la route à base de socket? Ma préoccupation actuelle concerne les limites de connexion simultanées et les coûts d'hébergement.

  2. Est-il possible de "diffuser" un périphérique en tant que serveur socket? c'est-à-dire une fois que tous mes lecteurs sont connectés, est-ce que je peux attribuer l'un des 6 appareils à un serveur de socket et pousser toutes les communications à travers cet appareil? Serait-ce fou? Cela permettrait de contourner les problèmes de concurrence et je n'aurais qu'à compter sur le service de serveur de socket comme lobby pour la connexion initiale. L'utilisateur alloué resterait connecté pour faciliter la communication entre le serveur et le serveur.

+0

Avez-vous l'intention de permettre aux utilisateurs de jouer sur un réseau local (Bluetooth ou Wi-Fi) ou sur Internet? Si c'est le cas, avez-vous envisagé d'utiliser GameKit? – Felixyz

+0

Les deux. Je vais utiliser GameKit pour la lecture d'un appareil à un autre, mais je veux aussi prendre en charge la fonctionnalité "trouver un jeu" sur Internet. – typeoneerror

Répondre

2

1.

Il est beaucoup plus facile d'utiliser la relève, et puisque le jeu est au tour par tour vous pouvez interroger à un rythme relativement lent (peut-être un ou deux secondes), ce qui signifie moins décharge de la batterie. Cela dit, l'utilisation de sockets ou de connexions HTTP persistantes serait une façon plus simple de le faire (et beaucoup plus de travail). Ces deux questions pourraient intéresser:

How do I create a chat server that is not driven by polling?

COMET (server push to client) on iPhone

Je ne sais pas pourquoi vous utiliseriez Autorité des marchés financiers. Pourquoi pas JSON? Ou peut-être HessianKit?

2. Il est logique de désigner l'un des périphériques en tant que serveur. Avoir un réseau complètement décentralisé de clients de jeu qui ont besoin de synchroniser est une tâche très difficile. Encore une fois, puisque votre jeu est basé sur le tour, ce qui ne nécessite pas une parfaite synchronisation en temps réel, vous n'avez pas à vous inquiéter que l'état centralisé introduise plus de latence.

Si vous avez l'intention que les utilisateurs jouent sur un réseau local, vous devriez envisager d'utiliser GameKit.

+0

Sur # 2. Toutes les ressources sur la façon de commencer à faire cela? J'ai vérifié notre RakNet (http://www.jenkinssoftware.com/) et pense que cela pourrait fonctionner, mais je suis loin d'être un expert en C, donc je ne sais pas si c'est quelque chose que je peux accomplir. Merci pour la perspicacité. – typeoneerror

+1

Peut-être que cela pourrait être plus simple que vous ne le pensez. Vous n'avez probablement pas besoin d'une bibliothèque de mise en réseau de jeu à part entière. La façon dont je ferais cela est le programme de l'application de sorte que les entrées et la logique et la représentation de l'écran sont complètement séparés. Ensuite, écrivez une classe de co-joueur factice qui émule stupidement les commandes d'un second joueur. Lorsque cela fonctionne, branchez GameKit pour obtenir les événements de contrôle réels de ce calque. Lorsque cela fonctionne, rédigez un serveur à l'aide de Google App Engine et utilisez l'interrogation pour obtenir des mises à jour de l'état. Encore une fois, cela devrait seulement s'interfacer avec la partie de votre code où les événements d'entrée sont passés. – Felixyz

+0

Quant à faire de l'un des périphériques un serveur, vous décidez arbitrairement au moment de l'établissement de la connexion quel sera le serveur (peut-être celui qui s'est le premier diffusé). Tous les autres périphériques ne mettent pas à jour leur interface en réponse aux événements utilisateur (sauf pour les choses simples comme la mise en évidence des boutons) mais les envoient au serveur, puis récupèrent les objets événement qui provoquent la mise à jour de l'interface. Ne soyez pas tenté de laisser chaque appareil mettre à jour son propre état. (C'est souvent nécessaire dans les jeux en temps réel, mais très difficile à retirer.) – Felixyz

Questions connexes