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

Développement Discussion :

[Concept]Concept d'un serveur TCP/IP


Sujet :

Développement

  1. #1
    Zc
    Zc est déconnecté
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 9
    Points : 6
    Points
    6
    Par défaut [Résolu][Concept]Concept d'un serveur TCP/IP
    Je suis actuellement en train de développer un serveur TCP/IP (open source) en C#. J'ai consulté pas mal d'aide, parcouru pas mal de code sources et une grande question me vient: Quel concept opter pour application serveur ?
    Je m'explique:
    * Le socket qui 'écoute' sync dans un thread ou async ?
    * Les sockets clients créés en sync ou async ?
    * Un thread qui parcourt tous les sockets clients pour savoir si qqun à qqchose à dire ? (avec les sockets en sync et un timeout à 100ms)
    * Les sockets clients créés en async et 'parlent' quand ils veulent
    * Les sockets clients sont stockés dans un ArrayList, Hashtable, Queue (avec des 'faux' clients pré-créés)
    * ... ?

    Bref, pas mal de possibilités ... mais laquelle est la plus performante d'après vous ?!
    Merci

  2. #2
    Zc
    Zc est déconnecté
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    ok, je vais pose ma question différemment:
    j'ai entendu dire, que lorsque l'on développe un serveur, il n'était pas très performant de créer un Thread par client. Pourquoi ?

  3. #3
    vic
    vic est déconnecté
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Points : 498
    Points
    498
    Par défaut
    "Serveur TCP/IP" c'est pour le moins vague comme description ...

    La puissance de la fonction select() est très souvent sous estimée, et les programmeurs préfèrent choisir des implémentations lourdingues à base de threads et autre fork ... Un seul select peut faire élégament et efficacement tout ce qu'on croit au premier abord ne pouvoir faire qu'avec des threads. Bon c'est mon avis, ça vaut ce que ça vaut ;o)

    Si tu veux un exemple de serveur "TCP/IP" performant regarde du côté des sources d'un serveur irc (exemple : http://bahamut.dal.net/).

    vic

  4. #4
    Zc
    Zc est déconnecté
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par vic
    "Serveur TCP/IP" c'est pour le moins vague comme description
    C'était un peu fait pour
    Pour l'instant, l'implémentation du protocol n'est pas très important, je voulais surtout parler du concept d'un serveur TCP/IP
    Citation Envoyé par vic
    Si tu veux un exemple de serveur "TCP/IP" performant regarde du côté des sources d'un serveur irc (exemple : http://bahamut.dal.net/)
    Excellent! C'est exactement ce genre de choses que je cherchais
    Merci

  5. #5
    Zc
    Zc est déconnecté
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par vic
    La puissance de la fonction select() est très souvent sous estimée
    hum ... je la connaissais pas celle-là, mais en effet, elle est excellente!
    Par contre, il semblerait que parfois, elle renvoie des sockets qui n'ont pas de données en attente (donc l'appel suivant à Receive bloque). Cela peut être facilement testé par un Poll avant le Receive, mais cela oblige de tester tous les sockets retournés.
    T'as une autre astuce ?!

  6. #6
    vic
    vic est déconnecté
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Points : 498
    Points
    498
    Par défaut
    Oui : la valeur de retour de la fonction indique le nombre de socket disponibles en lecture.

    vic

  7. #7
    Zc
    Zc est déconnecté
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    hum ... je récapitule ce que j'ai compris de cette fonction sur MSDN:
    je donne en paramètre une ArrayList (car un simple tableau Socket[] a une taille fixe, et il en veut pas) qui contient tous les sockets que je veux tester. Une fois la fonction appelée, ce même ArrayList ne contient que les sockets qui ont des données en attente. Donc je fais un foreach et un Receive à chaque tour.
    Que fais-je du nombre de sockets disponibles en lecture là-dedans ?

    PS: rappelle moi à l'ocas de te faire un béco et de te payer une bière, mon serveur est carrément transformé grace à la fonction Select!

  8. #8
    Zc
    Zc est déconnecté
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    la function Select renvoie void sur le framework .Net ... de plus, il n'accepte pas plus de 64 sockets ... valeur modifiable dans le fichier Winsock2.h dixit MSDN ... autrement dit, faites du C++
    Quelqu'un connait une astuce pour modifier cette valeur en .Net ?

  9. #9
    vic
    vic est déconnecté
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Points : 498
    Points
    498
    Par défaut
    Désolé mais en programmation réseau je n'ai d'expérience que sous linux et apparemment le fonctionnement est légèrement différent avec ".Net", je ne peux donc pas t'aider.

    C'est quand tu veux pour la bière, pour le bécot on va attendre un peu ;o)

    vic

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Aide pour serveur TCP multithread
    Par kingkong dans le forum Réseau
    Réponses: 3
    Dernier message: 27/04/2006, 12h37
  2. serveur TCP
    Par dirty_boy dans le forum Développement
    Réponses: 5
    Dernier message: 03/02/2006, 13h03
  3. Client Tcp/ Serveur TCP
    Par Phébus dans le forum Web & réseau
    Réponses: 2
    Dernier message: 21/07/2005, 16h35
  4. client/serveur tcp/ip en c sous unix
    Par oclone dans le forum Développement
    Réponses: 8
    Dernier message: 19/04/2005, 18h55
  5. Serveur TCP/IP Indy bloquant ?
    Par f6dqm1 dans le forum Web & réseau
    Réponses: 6
    Dernier message: 07/12/2004, 09h08

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