Comment construire un simple jeu à 2 joueurs, communiquer sur Internet, sans code personnalisé sur un serveur?

StackOverflow https://stackoverflow.com/questions/2144287

  •  23-09-2019
  •  | 
  •  

Question

Comment puis-je construire un simple jeu à 2 joueurs, qui communique sur Internet?

Je dois résoudre les problèmes de:

  • recherche ou rendez-vous - deux joueurs veulent trouver.

  • communications en cours. Ou l'autre joueur peut initier une action qui nécessite fournir de l'information à l'autre côté, dans un délai reasonbly rapide (latence IM type, sans temps de latence de type e-mail).

À cet égard, je suppose qu'il est équivalent à une conversation 2 voies, où les gens veulent être en mesure de trouver les uns les autres, et puis aussi, une fois jumelé, informer.

D'autres exigences:

  1. pour l'instant, on suppose les critères d'évaluation sont Windows OS, relativement récent.

  2. supposons ni machine du noeud final est directement accessible depuis Internet. On suppose qu'ils sont des machines clientes, cachées derrière les pare-feu qui bloquent les requêtes entrantes. Les machines peuvent effectuer des requêtes sortantes. (Par exemple, sur HTTP, mais TCP est aussi très bien)

  3. communication doit être privé. Pour simplifier, disons qu'il ya un secret partagé déjà en place, et les critères d'évaluation sont en mesure de le faire AES. Je suppose que ce que je veux dire par là, tout intermédiaire ne doit pas besoin de déchiffrer les paquets de message. Le décryptage se produira uniquement aux points d'extrémité.

  4. tout le code personnalisé doit fonctionner uniquement sur les PC clients.

  5. On suppose qu'il n'y a pas serveur dans l'Internet qui est sous mon contrôle.

  6. Je suis heureux d'utiliser des serveurs tiers pour faciliter intercommunication, comme un serveur de messagerie instantanée ou quelque chose, tant qu'il est libre, et je ne suis pas obligé d'installer un code personnalisé sur elle.


Quelles API sont disponibles pour faciliter cette conception?

Puis-je faire avec les API de messagerie instantanée? WCF? Y at-il WCF canaux pour Windows Messenger?

Quels sont les protocoles? HTTP? J'ai ce étiqueté comme "peer-to-peer", mais je veux dire que pratiquement ; il n'y a pas d'exigence difficile pour un protocole p2p formel.

Quels sont les formats messages utiliseriez-vous?


EDIT

Pour clarifier les exigences autour des serveurs, ce que je veux pas de serveur sous mon contrôle. Et AUCUN DE MON CODE CUSTOM sur un serveur. Ce n'est pas la même chose que « Aucun serveur ».

Pensez-y de cette façon: je peux envoyer un e-mail via SMTP, en utilisant un code personnalisé que j'écris sur le côté envoi et la réception. Mon code personnalisé peut se connecter via un intermédiaire de serveur SMTP libre. Cela nécessiterait aucune installation de code sur le serveur SMTP. C'est quelque chose comme ce que je veux, mais SMTP n'est pas acceptable, en raison de la latence.

EDIT2 J'ai aussi trouvé ceci: pour la messagerie instantanée, comme libpurple , mais écrit en C #


Réponse

Je peux faire ce que je veux, à l'aide des bibliothèques pour les cadres de messagerie instantanée. Une façon simple de le faire en utilisant Windows Live Messenger est d'utiliser le Messenger SDK Activité . Cela prouve le concept, mais il est pas vraiment une solution générale. Mais, les choses semblables peuvent être accomplies avec les bibliothèques de messagerie instantanée pour différents systèmes de messagerie, comme libpurple, ou en utilisant libs pour les canaux IRC. Dans tous ces cas, les serveurs de messagerie instantanée agissent comme l'infrastructure de communication pénétrant pare-feu.

Était-ce utile?

La solution

libpurple avec otr peut vous donner la vie privée par rapport à l'IM une telle application aurait besoin.

Autres conseils

IM est le mauvais outil. Au lieu de cela, utiliser une salle de chat IRC.

Avec une salle de chat IRC, vos clients « Se connecter » à la salle de chat, et qui est utilisé pour votre « présence ». Tout le monde dans la salle de chat est « disponible » pour jouer le jeu.

Une fois cela fait, l'instance de jeu communiquer entre eux par la salle de chat. Ils peuvent utiliser le canal global, ou les canaux IRC simplement privés pour le trafic de jeu.

Les questions à résoudre:

  • Tout d'abord, tout état de jeu est partagé sur les clients. De nombreux jeux ont fait ce (RTS est comme Age of Empires, jeux de rôle comme Diablo). Mais les Etats clients sont sensibles au piratage et la tricherie. C'est juste une simple vérité. Si le jeu est populaire, il sera piraté.

  • trafic Ping. Fondamentalement, le flux est que vous n'êtes pas connecté à la salle, votre client est en mode « disponible pour jouer ». Ensuite, il cingle TOUT LE MONDE AUTRE pour voir si elles sont disponibles pour jouer. Cela se produira avec chaque client « connecter » à la salle de chat. Vous pouvez ensuite utiliser la salle publique pour les événements de diffusion « Frank est prêt pour un nouveau jeu », « Frank a commencé un jeu avec Joe », etc. Cela peut aider garde les jeux synchronisés et non bavard, mais quand un client se connecte au chat chambre, ça va aller « Salut à tous, il est Bob, qu'est-ce que vous faites tous ». Donc, vous devez gérer cela.

  • Le volume de trafic. chambres IRC peuvent gérer beaucoup de trafic, mais pas beaucoup de trafic. La plupart sont conçus pour empêcher « spamming », « inondation », etc. Donc, vous pourriez bien être taux limité sur vous jeu. Pas un problème pour « Dames », plus pour « World of Warcraft » lors d'un 40 homme Raid. C'est un problème de conception du jeu.

  • Conditions d'utilisation. Le fournisseur IRC peut bien dire: « Euh non, vous ne pouvez pas le faire avec notre service ». Je ne l'ai pas regardé à elle, donc je ne sais pas, mais cela pourrait être un problème.

Autre que cela, l'IRC est un assez bon ajustement. Beaucoup de code bot IRC flottant sur le net, je ne l'ai jamais utilisé aucun.

Chaque jeu à deux joueurs doit avoir un certain type d'environnement serveur par le besoin impérieux d'avoir à communiquer entre deux clients / joueurs à tout le moins. Gardez à l'esprit, chacun des clients / joueurs peuvent également agir en tant que son propre serveur pour communiquer avec d'autres clients liés. Mais la nécessité de garder un œil sur tous les clients / joueurs à un moment donné et la nécessité de faciliter la recherche d'autres clients / joueurs exige en soi un certain type d'environnement serveur pour commencer.

Vous pourriez installer un babillard sur l'un des serveurs de babillards électroniques gratuits afin que les joueurs peuvent se retrouver. Vous aurez probablement envie de les encourager à utiliser des messages privés à échanger des adresses IP. Ensuite, utilisez un protocole qui connecte en utilisant des adresses IP. Bonne chance avec ça. Pare-feux font une douleur.

Alors, bien sûr, une machine de la paire aurait besoin d'agir en tant que serveur, l'autre en tant que client. Votre logiciel doit contenir les deux ensembles de code. J'ai écrit un tel jeu et je peux vous dire que le code de communication est un peu confus.

Je peux vous dire dès maintenant que vous seriez beaucoup plus heureux dans la vie si vous avez écrit un service Web pour faciliter la communication. Mais, alors, vous auriez besoin d'un serveur pour cela.

Bonne chance. Vous allez en avoir besoin.

OU, vous pouvez simplement écrire un jeu pour un client de messagerie instantanée, comme Microsoft Messenger. J'ai vu des jeux pour celui-là, donc je sais que cela peut être fait.

Comme quelqu'un l'a dit, il ne peut pas encore possible de le faire si vous n'avez pas un serveur intermédiaire entre les 2 joueurs. Comme vous êtes heureux d'utiliser le serveur tiers, je vous suggère de construire votre système en utilisant Google App Engine + XMPP sur HTTP. Il fonctionne très bien sur Internet et derrière le pare-feu. Et pourtant, il est gratuit (aussi longtemps que votre système ne se développe pas hors quota GAE).

Peer to peer est en raison de votre contrainte de pare-feu. Cela ne fonctionne pas vraiment facilement pour les services d'annuaire de toute façon.

La méthode suivante plus facile que je voudrais utiliser est de lancer un script serveur CGI très simple sur l'un des nombreux sites d'hébergement Web super bon marché. Il semble que vous ne voulez pas aller dans cette voie. Y at-il une raison particulière? 100 lignes de code et un serveur super pas cher devrait vous donner tout ce que vous demandez et plus encore.

Je suppose que vous pouvez accrocher dans une sorte de tiers discuter librarything. Je ne sais pas sur les protocoles actuels de messagerie instantanée, mais bon vieux IRC et un canal séparé pour votre jeu fonctionnerait. Vous pouvez même bricoler quelque chose en utilisant FTP. commentaires BLOG sur un site de blog gratuit travailleraient aussi. La question est pourquoi?

Ce sont tous les contournements. Ils obtiennent le travail fait dans obtus, inélégant, et mise à l'échelle mal façons.

Je vous invite à reconsidérer la solution de serveur Web.

Vous avez beaucoup d'exigences contradictoires. Les deux clients derrière un pare-feu bloque les requêtes entrantes signifie à peu près, ils ne peuvent pas faire peer-2-peer puisque ni machine peut agir en tant que serveur, et vous aurez besoin d'avoir un serveur de transport au milieu des messages quelque part routage à chaque client. En ce moment ce que vous demandez est à peu près pas possible compte tenu de l'exigence pas de serveur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top