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 :

[*NIX] Serveur multi-client que choisir, fork(), pthread ou select()


Sujet :

Réseau C

  1. #1
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut [*NIX] Serveur multi-client que choisir, fork(), pthread ou select()
    Salut,
    Je débute en programmation réseau et je me confronte à un problème de choix d'implémentation pour mon serveur multi-client, si j'ai bien compris j'ai trois façons de faire:
    • un processus par client, fork()
    • un thread par client, API pthread
    • multiplexage des descripteurs, select()


    Quelles sont les questions que je dois me poser en général pour faire ce choix ? (actuellement l'application que j'aimerais développer est une messagerie web et je penche plus pour le select())

    Merci.

    PS: n'hésitez pas à me proposer des documents traitant du sujet !

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    2 questions :
    • Quel est le nombre de connexions simultanées que tu dois supporter ?
    • Quel est le nombre de connexions non simultanées (nb de connexions par heure ou minutes) que tu dois supporter ?


    Une fois que tu auras cela, tu pourras déterminer ce que tu dois utiliser.

    Pour info, un fork() coute cher en ressources et temps CPU et un select ne sait gérer qu'un nombre de socket limité simultanément (voir la constante FD_SIZE je crois).

    Je ne connais pas les contraintes sur les thread.

    Si tu as des besoins de performances ou tu as beaucoup d'utilisateurs simultanément ou non, il faudra peut être passer par des truc un peu plus dépendant de l'OS (IOCompletionPort par exemple sous Windows).

    Mais afin de partir sur comment résoudre ton problème, qualifie le un peu mieux.

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 380
    Points : 41 576
    Points
    41 576
    Par défaut
    Un autre critère est est-ce qu'il y aura une interaction entre deux clients connectés?

    Un serveur Mail (SMTP) ou SSH n'aura pas d'interaction entre deux connexions, l'utilisation de fork() y est donc plus appropriée que pour un 'chat...

  4. #4
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Citation Envoyé par ram-0000
    ...un select ne sait gérer qu'un nombre de socket limité simultanément (voir la constante FD_SIZE je crois).
    en effet, FD_SETSIZE descripteurs:
    Code /usr/include/sys/select.h : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /* Maximum number of file descriptors in `fd_set'.  */
    #define       FD_SETSIZE              __FD_SETSIZE
    chez moi il est de 1024 :
    Code /usr/include/bits/typesizes.h : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /* Number of descriptors that can fit in an `fd_set'.  */
    #define __FD_SETSIZE            1024
    Entre temps j'ai lu un tas de doc et je sais à présent contourner cette limitation grâce à poll().
    Citation Envoyé par ram-0000
    Je ne connais pas les contraintes sur les thread.
    J'en connais au moins une, leur énormes complexité, c'est pourquoi je pense les utiliser en dernier recours.

    J'avoue que les choses sont un peu plus clair dans mon esprit à présent, un process ou un thread par client est une solution plus adaptée pour les clients ayant un rythme imposé (des applications temps réel), tandis que le select()/poll() est plus adapté pour les clients qui n'ont pas un rythme imposé (trafic asynchrone). Est-ce que mon raisonnement est juste ?

    Concernant mon application, le nombre de connexions simultanées n'est pas très important, et il ni y a évidement pas d'interaction directe entre les clients.

Discussions similaires

  1. serveur multi client avec fork()
    Par deby23 dans le forum Réseau
    Réponses: 17
    Dernier message: 11/09/2007, 16h32
  2. serveur multi clients
    Par aaronw dans le forum C++Builder
    Réponses: 4
    Dernier message: 06/03/2006, 09h01
  3. Fork, pthread et serveur multi-clients
    Par Pico10 dans le forum POSIX
    Réponses: 13
    Dernier message: 05/01/2006, 11h48
  4. Serveur Multi-clients
    Par darsky dans le forum C++Builder
    Réponses: 5
    Dernier message: 16/04/2004, 09h53
  5. Création d'un Serveur Multi Client
    Par N*E*R*D dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 16/03/2004, 17h13

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