Protocole de Jeu en reso : messages court ou long ??

Protocole de Jeu en reso : messages court ou long ?? - C++ - Programmation

Marsh Posté le 06-03-2004 à 17:26:56    

bonjour,
 
pour notre projet Reseau, on doit faire un RPG multijoueur (type MUD..) avec un protocol original
alors voilà on a pensé a des messages par balises style html ...
 
genre
 
<connexion><joueur ip=0.0.0.0 port=1600></connexion>
 
ce genre de message passera dans la port de controle et permettra au serveur de comprendre ce que veut le message
 
est-ce inutile ? quand on voit les messages FTP, qui sont bcp plus simple...c que c suffisant.
 
sinon, en fouillant un pe, on se rend compte que les MUDS n'ont pas vraiment de protocole, ils utilisent telnet... mais notre porf VEUT un protocole... quelquun aurai dejà fait ca ? comment ca se passe ?
 
on pense pas avoir de probleme au niveau programmation tout ca, mais là on a du mal a demarrer paske on arrive pas a faire de choix pour le protocole ....
 
 
merci !

Reply

Marsh Posté le 06-03-2004 à 17:26:56   

Reply

Marsh Posté le 06-03-2004 à 17:30:08    

qui du protocole Jabber ?
 
ton prof veut un protocole ou un protocole applicatif, c'est à dire que vos communications obéissent à certaines règles et ont un format spécial, compréhensible par ton application ?

Reply

Marsh Posté le 06-03-2004 à 17:38:59    

Bonjour,
 
à votre place, je transmettrais les données en binaire.
 
Pour le protocole, je ferais quelque chose comme ce qui suit.
 
un header pour chaque message avec les champs suivants:
- IDMSG, identifiant unique de message
- TYPE, type de message
- HEADER_LENGTH, longueur des données du header (en cas de changement de protocole)
- DATA_LENGTH, longueur des données hors header
 
Après, selon le type de chaque message, un format particulier, toujours en binaire. Par exemple, pour envoyer "<connexion><joueur ip=0.0.0.0 port=1600></connexion>"
 
Un entier sur quatre octets pour l'ip
Un entier sur deux octets pour le port
 
C'est pas très compliqué à écrire, c'est maintenable et performant.

Reply

Marsh Posté le 06-03-2004 à 18:34:29    

merci de vos réponse c donc ce que j'ai pensé en lisant la doc sur le protocole de quake2.
 
notre prof n'arrete pas nous dire de differencier les fonctions
- du protocole
- du jeu
 
j'ai pensé un truc genre ftp encore
commande protocoles : DECCONECT, USER ...
et des commandes realtives au jeu (et donc qui peuvent evoluer) du genre
GAME nouvelle commande ...
 
comme les commandes SITE de ftp ...
_______________________________________
 
sinon en lisant la doc de quake 2, ils parlent des frames, en gros, toutes les n fractions de secondes le serveur envoi a tout les joueur l'état du monde ....
 
le protocole devra donc le faire ....
TCP ? UDP ?
si j'ai bien compris avec l'UDP on pe envoyer a TOUT le monde plus facilement que avec du TCP ...

Reply

Marsh Posté le 06-03-2004 à 20:35:49    

DocMaboul a écrit :

Bonjour,
 
à votre place, je transmettrais les données en binaire.
 
Pour le protocole, je ferais quelque chose comme ce qui suit.
 
un header pour chaque message avec les champs suivants:
- IDMSG, identifiant unique de message
- TYPE, type de message
- HEADER_LENGTH, longueur des données du header (en cas de changement de protocole)
- DATA_LENGTH, longueur des données hors header
 
Après, selon le type de chaque message, un format particulier, toujours en binaire. Par exemple, pour envoyer "<connexion><joueur ip=0.0.0.0 port=1600></connexion>"
 
Un entier sur quatre octets pour l'ip
Un entier sur deux octets pour le port
 
C'est pas très compliqué à écrire, c'est maintenable et performant.


 
Pas la peine de s'embeter avec un protocole binaire pour un petit jeu comme le leur. Il suffit de compresser le flux de données avec gzip par exemple.

Reply

Marsh Posté le 06-03-2004 à 20:39:00    

Kristoph a écrit :


 
Pas la peine de s'embeter avec un protocole binaire pour un petit jeu comme le leur. Il suffit de compresser le flux de données avec gzip par exemple.


 
Certes, mais avec la solution proposée initiallement, il va falloir qu'ils se programment un parser ce qui, à mon sens, n'est pas nécessairement plus simple que de lire du binaire. Qu'en penses-tu?

Reply

Marsh Posté le 06-03-2004 à 20:44:35    

4XL_ROSE a écrit :


TCP ? UDP ?
si j'ai bien compris avec l'UDP on pe envoyer a TOUT le monde plus facilement que avec du TCP ...


 
C'est tout à fait exact. L'avantage du TCP est qu'on est sûr que les données arrivent ou qu'on peut gérer les erreurs le cas échéant. Souvent on fait et du TCP et de l'UDP. UDP pour envoyer les données ; TCP pour contrôler que ça se passe bien avec l'UDP.

Reply

Marsh Posté le 06-03-2004 à 21:21:35    

L'udp permet la multidiffusion, pas le tcp


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 06-03-2004 à 23:02:14    

DocMaboul a écrit :


 
Certes, mais avec la solution proposée initiallement, il va falloir qu'ils se programment un parser ce qui, à mon sens, n'est pas nécessairement plus simple que de lire du binaire. Qu'en penses-tu?


 
On trouve des parseurs XML a tous les coins de rue aussi.

Reply

Marsh Posté le 07-03-2004 à 01:40:36    

+1 par rapport à Doc : le protocole binaire du genre TLV est assez courant. Réaliser un parser pour ce type de protocole parrait vraiment trop luxueux et pénalisant pour les perfs. Une trame (Type,Taille,Données). Eventuellement réaliser plusieurs niveau d'encapsulation, toujours en TLV.
 
Pour le type des connexions :  
  - UDP dans le sens serveur vers clients.
  - TCP dans le sens clients vers serveur.
 
C'est une question de performances surtout. La fiabilité de TCP pénalise les performances, on l'utilise pour les connexions bas débit (clients vers serveur). A l'inverse UDP est efficace pour envoyer de grandes quantités de données sans trop pénaliser les performances (serveur vers clients) au risque de perdre qq trames.
 
Cordialemet,
   XteR.
 

Reply

Marsh Posté le 07-03-2004 à 01:40:36   

Reply

Marsh Posté le 07-03-2004 à 01:54:40    

xterminhate a écrit :

+1 par rapport à Doc : le protocole binaire du genre TLV est assez courant. Réaliser un parser pour ce type de protocole parrait vraiment trop luxueux et pénalisant pour les perfs. Une trame (Type,Taille,Données). Eventuellement réaliser plusieurs niveau d'encapsulation, toujours en TLV.
 
Pour le type des connexions :  
  - UDP dans le sens serveur vers clients.
  - TCP dans le sens clients vers serveur.
 
C'est une question de performances surtout. La fiabilité de TCP pénalise les performances, on l'utilise pour les connexions bas débit (clients vers serveur). A l'inverse UDP est efficace pour envoyer de grandes quantités de données sans trop pénaliser les performances (serveur vers clients) au risque de perdre qq trames.
 
Cordialemet,
   XteR.


 
Oui mais non quand même. Le TCP est rarement la bonne solution pour le protocole reseau d'un jeu, mais ce n'est certainement pas pour une question de débit. Je rappelle que le TCP est utilisé courrament pour les serveurs HTTP et FTP et que ceux ci n'ont aucun mal à remplir notre bande passante s'il le faut.
 
La vrai faiblaisse du TCP viens justement de sa fiabilité. Dans le protocole reseau d'un jeu, il arrive très souvent que certaines données n'aient pas besoin d'etre transferées avec fiabilité et dans cette situation le protocole TCP va causer un bloquage du jeu le temps que le paquet perdu soit renvoyé.

Reply

Marsh Posté le 07-03-2004 à 10:09:25    

Effectivement, la fiabilité n'est pas absolument nécessaire pour un jeu, surtout lorsque les données sont transmisses régulièrement.  
 
Lorsque le trafic TCP augmente la charge du serveur augmente dans des proportions nettement plus importantes que pour UDP. UDP peut donc s'avérer un meilleur choix pour optimiser la gestion de nombreux clients simultanément.
 
Cordialement,
   xter.

Reply

Marsh Posté le 07-03-2004 à 11:32:29    

merci pour toutes ces reponses.
on va don cessayer d'ouvrir deux connec : une TCP, une UDP
a ce que j'ai compris dans la doc de IP, on peut ouvrir une connection TCP et une UDP sur un meme port en meme temps ...
 
mais par exemple en UDP ...disons je ve envoyer le meme message a toute le monde connecté :
je fais comment? ya pas d'adresse destination ...
 
peace

Reply

Marsh Posté le 07-03-2004 à 15:30:01    

Reserve un port par type de trafic. Vu le nombre de ports TCP ou UDP disponibles, tu n'as pas besoin de tout multiplexer sur le même port.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed