Je programmment un jeu multi-joueurs Android, qui consiste essentiellement à un serveur où les clients se connectent et échangent des messages. Lorsque le joueur se connecte à un serveur, une liste de joueurs lui retourne. Un joueur peut ensuite sélectionner un utilisateur à contester - bien sûr, il doit sélectionner un lecteur à partir de la liste des joueurs, qui ne contient que des utilisateurs connectés. P>
Lorsqu'un joueur1 conteste Player2, un message doit être transmis à partir du joueur1 au serveur, qui doit envoyer un message au lecteur2, en l'informant sur le défi. Le joueur2 peut alors accepter / refuser le défi. P>
Je peux utiliser les techniques suivantes pour que cela se produise: p>
Utilisez le serveur personnalisé / client avec la programmation Java Socket. Le serveur accepte essentiellement une connexion du client, reprochant un nouveau thread pour chaque client connecté. Le problème avec c'est: p>
Utilisez Java Rest Jersey pour construire le serveur client en haut de HTTP. Ce serait une solution parfaite si le serveur pouvait facilement envoyer des notifications aux clients. Il y a en fait plusieurs décisions de conception ici: p>
Je serais heureux de savoir comment d'autres jeux multi-joueurs gèrent les communications réseau, si les deux joueurs jouent au jeu sur le réseau. P> LI>
Je suis également ouvert à une suggestion totalement nouvelle comment réaliser ce que je veux. Je peux à peu près beaucoup de code, alors n'hésitez pas à me faire savoir un moyen plus difficile d'atteindre la communication réseau. P> li> ol>
Permettez-moi également de mentionner que je serai heureux de mettre en œuvre une méthode totalement spécifique pour travailler dans mon cas, afin que cela puisse faire tout ce qui fera le travail, mais je cherche également une manière plus générale pour la communication entre clients et serveur. Afin que je puisse programmer une interface / autre et réutiliser le code dans d'autres jeux Android, applications Android. P>
J'espère avoir présenté le problème suivant et que je recevrai des réponses précieuses. P>
merci p>
3 Réponses :
Ça sonne comme Android nuage à Le dispositif-messagerie pourrait être ce dont vous avez besoin p>
notifications push sans l'application qui doit conserver une connexion ouverte p>
Salut. J'ai oublié de mentionner que dans mon post. Ce n'est pas une option, car Google pourrait commencer à charger des messages envoyés et je ne suis pas sûr: existe-t-il un nombre limité de message pouvant être envoyé quotidiennement? De plus, je pense aussi que les jeux de réseau à Android n'utilisent pas cela, mais quelque chose de plus sophistivé. J'ai peut-être tort.
"Votre compte d'expéditeur sera attribué au quota par défaut, qui correspond actuellement à environ 200 000 messages par jour" code.google.com/intl/sv-se/andrroid/c2dm/quotas.html
Vous devriez jeter un oeil à XMPP. C'est un protocole (créé à l'origine pour les programmes de discussion) qui permet d'envoyer des données XML entre les utilisateurs.
Il possède une relation de serveur client séparée, de sorte que vous puissiez vous concentrer sur le développement d'une application client adaptée aux téléphones et à un autre serveur en fonction de vos besoins. p>
Il existe des charges d'informations disponibles sur le protocole (je devrais savoir, j'ai écrit une thèse sur l'utilisation du protocole dans les applications de jeu), mais vous pouvez commencer par le regardant sur Wikipedia pour voir si c'est ce que vous voulez. p>
Asmack est une bibliothèque de création de clients XMPP Android. Il faut quelques modifications pour la configurer et tout faire pour travailler, mais une fois que vous faites, c'est soigné. P>
edit: strong> relatif à la réponse suggérant à l'aide du C2DM: Envoie-vous des messages C2DM trop fréquemment? Si vous avez besoin de communiquer avec votre application fréquemment sur une courte période de
Temps, C2DM n'est probablement pas la meilleure solution. Au lieu de cela, considérez
Implétant XMPP ou votre propre protocole pour échanger des messages et utiliser
C2DM uniquement pour envoyer la notification initiale. P>
blockQuote>
à partir du Documents C2DM "Envoi de grand nombre de messages C2DM" A >: p>
Cela pourrait être une option. Je vais regarder dans ça. Je suis également tombé sur ceci lors du googling, je ne l'ai tout simplement pas vu comme la meilleure option. Je pensais que les jeux utilisent quelque chose de différent de nos jours. Donc, fondamentalement, vous suggérez un serveur Java de repos + XMPP? Et oui, les messages sont envoyés assez fréquemment - chaque seconde.
Cela fonctionne étonnamment bon. Mais vous devrez peser le coût supplémentaire de transfert / interprétation de code XML plutôt que de valeurs spécifiques contre le fait que l'ensemble du protocole / des bibliothèques requis est déjà terminé et testé sur plusieurs années.
Salut. Je voudrais une fois de plus envie de vous remercier pour la réponse, mais j'ai quelques problèmes supplémentaires. 1) Étant donné que mes utilisateurs sont connectés sur le XMPP, ils doivent d'abord s'enregistrer avec un mot de passe / nom d'utilisateur que je n'aime vraiment pas. Est-il possible pour eux de spécifier simplement un nom d'utilisateur, qui suffit pour authentifier automatiquement l'utilisateur et le met sur une liste de joueurs. 2) Devrais-je utiliser uniquement les utilisateurs de la session en cours (la session qui se tient à droite, ni devrais-je créer un nouvel utilisateur pour chaque nouveau nom d'utilisateur. Si ce dernier, la base de données peut alors se développer de manière assez grande. Toute pensée est Bienvenue.
Je suppose que vous voulez une sorte d'identification des joueurs, comme un nom d'utilisateur? Si tel est le cas, vous pouvez simplement faire connecter le client avec le nom d'utilisateur en tant que mot de passe, généré au hasard un ou l'identifiant de périphérique, car je pense que le mot de passe est nécessaire en fonction du protocole. Si vous n'avez pas besoin d'enregistrer des données pour les utilisateurs, par exemple Les utilisateurs ne sont utilisés que pour afficher un identifiant (nom d'utilisateur), je suppose que le meilleur serait de supprimer l'utilisateur du serveur lorsqu'ils terminent le jeu et se déconnectent.
Les noms d'utilisateur / mots de passe sont après tout simplement utilisé pour identifier un seul utilisateur dans le réseau. Vous pouvez masquer cela de l'utilisateur sous une couche d'abstraction, laisser votre serveur ou votre client en décider en fonction de certains facteurs appropriés. En fin de compte, il vous appartient comment contrôler cela.
Je voterais en faveur d'une technique de passage de message - comme Activemq, rabbbitmq, Zeromq Eor quelque chose comme ça. Sur le côté serveur, vous pouvez rester avec Java ou JavaScript (comme
nœud.js) - Cette solution fournirait la plupart des performances et des latences minimales. p>
Si la latence n'est pas si critique, vous pouvez aussi bien utiliser les appels de repos avec JSON P>