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

Threads & Processus C++ Discussion :

Meilleure façon d'utiliser un serveur asynchrone (Boost.Asio)


Sujet :

Threads & Processus C++

  1. #1
    Membre actif Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Points : 221
    Points
    221
    Par défaut Meilleure façon d'utiliser un serveur asynchrone (Boost.Asio)
    Bonjour à tous

    Je test un code exemple de Boost.Asio ( async_tcp_echo_server.cpp) sur linux.

    Je ne suis pas sur d'avoir bien compris certain point d'un serveur asynchrone.
    Que se passe-t-il si plusieurs clients se connectent en même temps, et envoie leur données ? Le serveur va les traiter les 1 à la suite des autres?
    Quelle est la meilleure façon de traiter les données reçues dans do_read ? Dois je créé un thread qui récupère la donnée et la traite ou dois je transférer les données à travers une mémoire partagé ou un pipe à un autre thread qui lui se chargera de traiter les données ?

    Je vous remercie de votre aide
    Cdl
    "Nulla Tenaci Invia Est Via"
    Aux persévérants aucune route n'est interdite

  2. #2
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    Je fais de cette façon (pour une gestion des données asynchrone en read) :
    - Je lance un thread en lecture sur la socket.
    - Quand des données sont dispo, je vois deux façon de faire : soit tu les stockes en interne dans la classe qui gère la socket, soit tu les envoies dans une autre classe qui va l'ajouter à une pile de messages en attente. Dans les deux cas, inutile de préciser que les mutex sont de rigueur.

    En gros, soit tu centralises toutes tes données quand tu en reçois des nouvelles, soit tu laisses le thread principal (ou un autre) aller chercher les données lui-même. Dans tous les cas, le traitement se fait "un par un". Cependant, tu peux tout à fait faire le traitement dans des threads, tu n'as pas grand chose à changer à ma logique.

    Cela dit, il serait intéressant que d'autres personnes proposent leurs idées. J'ai toujours fait de ces façons pour un serveur asynchrone donc je ne sais pas s'il n'existe pas une autre façon de faire à laquelle je n'aurais pas pensé.

  3. #3
    Membre actif Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Points : 221
    Points
    221
    Par défaut
    Merci de ta réponse.

    L'action que je dois réalisé est l'enregistrement de la données dans une base de données.
    Je pensais lancer un thread suite à la réception de la données qui analyse la données et fait l'enregistrement dans la base de données.
    Pour finir j'aurai une autre application qui traitera les données nouvellement enregistrés; Comme cela je pourrais debuger le traitement sans que le serveur soit impacté par mes modifications.
    "Nulla Tenaci Invia Est Via"
    Aux persévérants aucune route n'est interdite

  4. #4
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    Dans ce cas-là c'est encore plus simple : quand ton thread reçoit les données, il n'a qu'à directement les enregistrer en base de données.

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/06/2014, 22h01
  2. [FTP] Meilleur façon de récupérer du code d'un serveur
    Par maximenet dans le forum Langage
    Réponses: 5
    Dernier message: 27/12/2006, 16h43
  3. Quel est le meilleur moyen d'utiliser uns base MySQL
    Par netah25 dans le forum C++Builder
    Réponses: 8
    Dernier message: 28/12/2005, 08h46
  4. Est ce bien la meilleure façon de faire un histogramme ?
    Par rvzip64 dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 10/05/2005, 12h41
  5. architecture d'un programme client/serveur asynchrone (win)
    Par Heimdall dans le forum Développement
    Réponses: 2
    Dernier message: 05/09/2003, 23h59

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