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 :

architecture d'un programme client/serveur asynchrone (win)


Sujet :

Développement

  1. #1
    Membre régulier
    Homme Profil pro
    Collégien
    Inscrit en
    Mars 2003
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Mars 2003
    Messages : 192
    Points : 87
    Points
    87
    Par défaut architecture d'un programme client/serveur asynchrone (win)
    bonjour !!


    je développe une petite application win32 en C, et vu que c ma 1ere, j'apprend au fur et a mesure que je code. Au point où elle en est elle fonctionne, cependant, de manière bloquante

    en effet, je ne connaissait pas a ce stade les différentes techniques non bloquantes, alors, pdt un transfert de donnée un peu long... la fenetre ne répond plus aux messages

    donc j'ai décidé de passer a un modèle asynchrone, non bloquant (tcp)
    le problème qui se pose est que ce changement implique une réorganisation totale de mon code... je viens voir les experts, afin de savoir si des modèles de communications idéaux existent.

    voici comment s'organise mon code actuel :

    le client :

    chargé d'envoyer en fonction du bouton cliqué par l'utilisateur, une requete au serveur afin que celui ci execute un service correspondant. ceci se fait par l'intermédiaire d'une fonction que j'appelerai "fonction d'appel"

    lorsque l'utilisateur clique sur le bouton "service 1", la fonction d'appel de ce service est appelée, elle va envoyer au serveur un numéro d'identification, utilisé par ce dernier pour aiguiller son execution vers le service aproprié.

    puis la fonction d'appel envoie un paquet de parametres qui seront reçu par la fonciton de service serveur, et utilisés pour son execution.

    comme on le voit, le principe est simple, et une fois l'auiguillage fait, toute la communication se fait entre les fonction d'appel et de service.



    pour l'organisation asynchrone, tout est différent, car un send, ou un recv doit se faire lorsqu'on est sur qu'il y a qqch a faire... qd on reçoit le message dans la fenetre. ainsi, on ne peut plus mettre emission, reception, soit tout le dialogue en fait, dans la fonction d'appel.

    je propose un schéma d'organisation comme suit :

    dans le switch principal de la boite de dialogue, sur mon évènement perso WM_SOCKET_EVENT, j'appele une fonction network( lParam, wParam), cette fonction jouera en quelque sorte le role d'un central de communications.

    sont squelette sera un switch gérant les FD_CONNECT, FD_READ, FD_CLOSE.

    dans le cas d'un FD_READ, elle appellera une fonction de reception, et aiguillera le paquet reçu vers la fonction appropriée a sont traitement. ce qui implique l'envoi d'un message d'entete, ou d'une variable spécifique, permettant l'aiguillage.

    maintenant, les questions que je me pose :

    1) est-ce un modèle raisonnable, pour l'efficacité, la programation ? en existe t-il des meilleurs ?

    2) après la création de mon socket, je fais un WSAAsyncSelect, ce qui signifie que mon socket est en mode non bloquant. alors, si une fonction doit faire un send, ou un recv, seront ils bloquant ?
    ce que j'ai compris, c'est qu'avec ce modèle de message, on est sûr qu'en faisant un recv, il y a qqch a recevoir, cependant, la reception va-t-elle encore bloquer ma fenetre ?

    3) puis-je continuer a utiliser mes recv/send que je connais, ou dois-je utiliser WSASend et WSARecv ?

    merci pour votre aide !
    --
    Heimdall

  2. #2
    ovh
    ovh est déconnecté
    Rédacteur
    Avatar de ovh
    Homme Profil pro
    Architecte devops web full stack
    Inscrit en
    Mai 2002
    Messages
    3 841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte devops web full stack

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 841
    Points : 6 513
    Points
    6 513
    Par défaut
    Je ne sais pas si tu dois nécessairement revoir ta programmation réseau. Pour éviter que l'interface utilisateur se "gèle" (freeze) pendant une grosse opération de transfert de données (que ce soit par réseau ou sur fichier), tu peux mettre ta routine "lourde" dans un nouveau thread.

    Tutoriels sur les UPS, e-commerce, PHP, critiques de livres...

    Pensez à consulter les FAQs et les cours et tutoriels.
    FAQ Linux - Cours et tutoriels Linux - FAQ PHP - Cours et tutoriels PHP
    Ce forum est fait pour vous et surtout par vous, merci d'en respecter les règles.

    Je n'ai rien à voir avec la société www.ovh.com !

  3. #3
    Membre régulier
    Homme Profil pro
    Collégien
    Inscrit en
    Mars 2003
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Mars 2003
    Messages : 192
    Points : 87
    Points
    87
    Par défaut
    moué, bah en fait trop tard, pi j'avais pas envie de contourner le problème avec un thread, j'ai donc opté pour les sockets asynchrones, et suis en train de coder le "tronc central" des répartitions de paquets réseau du client.

    merci de la réponse !
    --
    Heimdall

Discussions similaires

  1. Aide sur un programme Client Serveur
    Par clubmed01 dans le forum Linux
    Réponses: 33
    Dernier message: 29/05/2012, 11h22
  2. Réponses: 7
    Dernier message: 29/05/2009, 21h47
  3. programme client serveur mode TCP/UDP en java
    Par ouss01 dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 03/04/2009, 10h05
  4. Exemples de programmes client/serveur
    Par anakronox dans le forum Réseau
    Réponses: 11
    Dernier message: 02/12/2008, 15h27
  5. build.xml pour un programme client serveur
    Par donyas dans le forum ANT
    Réponses: 5
    Dernier message: 23/12/2006, 00h49

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