2008-11-04 9 views
2

Je suis intéressé à assembler mon premier jeu en ligne en utilisant Flash comme client et en écrivant une application back-end en C++ où l'état actuel du jeu est conservé.(C++) Serveur de jeu, (Flash) Client

J'ai fait beaucoup de jeux en C++ avant d'utiliser SDL, SFML, Allegro, etc etc mais je n'ai jamais eu l'occasion d'utiliser les bibliothèques réseau. Je m'intéressais simplement à une direction utile pour laquelle les bibliothèques sont les mieux adaptées aux serveurs de jeu où le serveur réel n'a aucun affichage graphique (ou n'en a pas besoin mais pourrait avoir). En toute honnêteté, je pense que la réponse sera un et une fois que je prendrais le coup de sockets, il deviendra un jeu d'enfant d'envoyer et de revenir des données ... mais il ne peut pas aider à demander d'abord. J'ai très peu d'expérience en flash ou en as3, mais comme l'idée d'être capable d'accéder au jeu via un navigateur, le flash d'apprentissage est forcément un obstacle que je vais devoir surmonter mais mon principal intérêt est de nouveau tous les conseils sur les bibliothèques, ou sources, ou des tutoriels qui sont bons pour l'envoi/réception de données via des sockets ou quelle que soit la méthode qui fonctionne le mieux. J'ai lu sur les arguments entre TCP/UDP donc je ne veux pas commencer une guerre comme ça ici; En résumé, je ne cherche que quelque chose de simple pour me mettre en marche :-p

En guise de remarque, la raison pour laquelle je choisis C++ est que les joueurs sont en réalité des robots avec une virtualité virtuelle ... machines et tout se déroulera sur le serveur afin que le nombre de joueurs augmente alors que le besoin d'imiter chaque vm :-p

Mise à jour:

le monde du jeu est destiné à être en temps réel, mais le l'interaction du joueur ne doit pas être. La base du jeu est que vous programmez de petits robots qui interagissent dans un monde persistant et qui ont des objectifs et des défis à relever tous les jours/toutes les semaines pour gagner des points. Je pensais que la mise en mémoire tampon des données d'affichage serait possible car le joueur n'a pas besoin de visuel en temps réel car il n'a aucun contrôle direct sur ses robots. Le serveur mettra environ 10 secondes de données en mémoire tampon pour chaque connexion, puis les enverra en une fois - de cette façon, pendant que les données sont lues dans le client, le serveur est en train de les mettre en mémoire tampon. Les interactions générales que le joueur aura avec le serveur téléchargeront un nouveau code et obtiendront des statistiques, il peut également y avoir d'autres commandes permettant de déplacer votre robot ou de le réinitialiser à sa position de départ. Toute commande à distance est effectuée via un canal de communication et est donc retardée par le tampon. Cela pourrait facilement s'expliquer par le fait que le monde persistant est quelque part comme Mars (la planète) et le signal prend un certain temps pour aller et venir. J'avais prévu d'avoir un "laboratoire" où vous pourriez configurer les robots et les tester en temps réel sur le client, cela n'a rien à voir avec le monde réel du jeu et ne devrait donc pas nécessiter de mise en réseau - bien que je Je n'ai pas envie d'écrire une VM dans les deux langues :(

Je suis complètement à l'aise en C++ et j'ai déjà quelques prototypes de travail du monde persistant en place - je suis juste un débutant complet en matière de réseautage si bien compris il serait préférable d'obtenir des conseils en premier.

Répondre

2

Bien qu'il soit principalement écrit pour C, il est encore grand pour C++:
Beej's guide to networ programming.k
Il couvre toutes les bases, et a une section sur les changements nécessaires pour Win32 :)
me semble également de rappeler que Flash nécessaire mettre fin à null-bytes sur chaque paquet, donc à la place de send (socket, szData, strlen (szData), 0); utilisez send (socket, szData, strlen (szData) +1,0); pour envoyer une chaîne :)

2

Utiliser boost :: asio pour la programmation réseau

0

Je ne suis pas sûr que votre jeu a besoin de communications en temps réel ou si, si faire des requêtes à un serveur pour charger, enregistrer et exécuter jeux est suffisant.

Si c'est le cas, vous pouvez utiliser une sorte de couche «middleware» pour gérer les parties réseau. Flash est heureux de créer des documents XML et de les envoyer à un serveur via HTTP, puis de traiter les réponses XML reçues. il a beaucoup de bonnes choses intégrées pour gérer toutes ces choses d'une manière très facile. Peut-être que vous pourriez avoir un serveur en C# ou php ou java selon votre plate-forme qui fonctionne dans un serveur web et gère les demandes et les réponses et transmet les demandes à votre serveur C++ qui pourrait fonctionner indépendamment sur un serveur via une file d'attente ou base de données ou connexion locale. Il peut être plus facile à la fois du côté flash et du côté serveur de gérer les problèmes de mise en réseau et de communication de cette manière, car C++ n'est pas le langage le plus facile à mettre en réseau, même avec une bibliothèque.

Je ne sais pas si cela répond à vos requierments soit pour votre jeu ou plate-forme bien, je suis juste le jeter dans une suggestion

1

Lorsque vous utilisez les classes Socket ou XMLSocket de Flash, assurez-vous d'avoir une sécurité fichier de stratégie sur votre serveur. sinon, vous ne pourrez pas ouvrir une socket. Consultez ce SO question pour plus d'informations.

+0

............ +1! – Poni

Questions connexes