Bonjour !
Je suis en train de bidouiller un petit programme de type client pour un jeu assez connu.
Ce jeu défini un protocole réseau, qui consiste en un certain nombre de "packets" pouvant contenir des données (int, short, string, etc...) dans un ordre ou dans un autre.
Par exemple, le packet de type A va contenir deux int, puis un short, suivi d'un string. (quand je parle de packets, je ne parle pas des couches réseau inférieures).
Or donc, pour récupérer les données du packet A, je procède comme suite :
Chacun de ces petites fonctions fait un appel à "recv()" sur une SOCKET et limite l'arrivée des données à la taille du type spécifié. En gros, j'utilise le système de file proposé par "recv()" pour arriver à mes fins.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 int a = recupererInt(); int b = recupererInt(); short c = recupererShort(); string s = recupererString();
Ma question est donc : Es-ce la bonne approche ? Dans d'autre programmes, je vois souvent des fonctions récupérant des gros buffers (1024 octets par exemple) pour ensuite les reparser, les caster, ou les copier pour récupérer les types. Ce qui me gêne, c'est qu'un tel système refait - à mon sens - ce que "recv()" fait déjà : Mettre les éléments en mémoire en attendant leur lecture/utilisation.
Bref, j'aimerais avoir votre avis là dessus (récupérer beaucoup de data, puis l'interprêter, ou bien récuperer les data par petits bouts).
Mes deux critères sont :
- Faible consommation en mémoire / processeur
- Rapidité des communications réseau
Je vous remercie par avance.
EDIT : Finalement, la même question se pose pour "send()", sauf que là je suis encore moins sûr de moi (si j'appelle deux fois "send()", es-ce que le kernel va attendre les deux appels avant d'envoyer les data par le socket ? En principe, c'est une des fonctionnalités de cette couche)
Partager