IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

[Performances] Appels répétés de 'recv()'


Sujet :

Réseau C

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 21
    Points : 18
    Points
    18
    Par défaut [Performances] Appels répétés de 'recv()'
    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 :
    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();
    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.

    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)

  2. #2
    Membre averti
    Homme Profil pro
    Java
    Inscrit en
    Mai 2011
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 170
    Points : 444
    Points
    444
    Par défaut
    Juste pour information, tu peux te tourner vers l'envoie de structure ;-)

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Impossible, car les types string (pouvant être présents au beau milieu d'un packet) sont de taille variable. (et la taille totale du packet n'est pas indiquée au début de celui-ci), donc ce n'est qu'une fois tous les string lus que je peux déterminer la terminaison d'un packet.

  4. #4
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Des élements de réponse intéressants pour ceux que ça intéresserait quand même :
    http://stackoverflow.com/questions/4...ible-scenarios

Discussions similaires

  1. Performance appel procédure SQL Dev.
    Par diplomegalo dans le forum PL/SQL
    Réponses: 4
    Dernier message: 27/04/2011, 17h01
  2. Réponses: 5
    Dernier message: 10/07/2009, 23h43
  3. Performance : temps d'appel et de reponse
    Par ForHuman dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 03/01/2009, 02h24
  4. Réponses: 2
    Dernier message: 16/10/2008, 11h48
  5. [socket] appel de recv() depuis le client
    Par Tymk dans le forum C++
    Réponses: 22
    Dernier message: 02/08/2008, 20h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo