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

Linux Discussion :

[Reseau] comment réaliser un serveur multi client.


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 154
    Par défaut [Reseau] comment réaliser un serveur multi client.
    Bonsoir à tous.

    J'aimerai faire un serveur multi client en C cependant je ne sais pas du tout la marche à suivre, grace à un select() j'arrive à détecter une connexion entrante j'ai alors le loisir de faire un thread, jusque la je pensais que j'étais sur la bonne voie cependant j'ai cru comprendre que le nombre de thread par process était limité donc j'imagine qu'il y à une autre façon de procéder ; cependant j'ignore totalement la marche à suivre.

    Pourriez vous me conseiller ?

    Merci et bonne soirée.

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Tu peux tout à fait gérer plusieurs clients dans un seul et même thread. C'est à ça que sert select() (ou poll(), ou eselect(), qui font essentiellement la même chose avec un interface différente).

    Quand un client se connecte, accept() retourne une nouvelle socket pour dialoguer avec ce client. Il suffit de maintenir une liste des sockets qui ont été retournées par accept(), et faire un select() en boucle sur cette liste de sockets. Dès qu'une socket et prête tu la traite, tu envoies ta réponse, et tu repart sur le select().

    D'un point de vue performance il faut trouver le juste milieu entre les deux extrêmes, qui sont un thread par client d'une part, et un seul thread d'autre part.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 154
    Par défaut
    Si je comprends bien il faut prédéfinir une liste de "client"

    N'est ce pas un peu trop gourmand d'un point de vue performance ?
    J'imagine que pré-déclarer 1000 clients ca a un impact en mémoire non ?

    Merci de m'avoir répondu.
    Bonne soirée

  4. #4
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    Citation Envoyé par geek-59600 Voir le message
    Si je comprends bien il faut prédéfinir une liste de "client"

    N'est ce pas un peu trop gourmand d'un point de vue performance ?
    J'imagine que pré-déclarer 1000 clients ca a un impact en mémoire non ?

    Merci de m'avoir répondu.
    Bonne soirée
    cela a un impact mémoire effectivement, l'occupation mémoire dépendra de ce que tu mettra dans ton "client". le démarrage de ton application sera plus long (encore que si c'est bien fait cela ne se ressens pas trop sur un hard récent).

    Cela s'appelle un pool c'est une technique de programmation possible. Si la gestion de ce pool est bien faite cela peux limiter la fragmentation de ta mémoire donc ce n'est pas mauvais pour les performances.

    Ensuite toujours en terme de performance, il faut comparer le coût d'allocation d'allocation d'un "client" avec le coût d'une recherche d'un "client" libre dans le pool.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 154
    Par défaut
    Merci beaucoup, maintenant j'ai une bonne base de recherche.

    Bonne journée

Discussions similaires

  1. [sockets][UDP][C/C++] serveur multi-clients
    Par l@rry dans le forum Développement
    Réponses: 4
    Dernier message: 08/06/2006, 14h11
  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