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

WinDev Discussion :

Question existentielle communication réseau [Généralités]


Sujet :

WinDev

  1. #1
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut Question existentielle communication réseau
    Bonjour à tous,

    Voici ma petite question existentielle J'ai une application qui extrait des données venant d'une DLL toutes les 10ms et j'ai besoin de partager ses données à travers le réseau pour les récupérer à partir d'autres applications en simultané.

    Je me suis orienté donc vers les sockets que je pense être la solution la plus viable (oui/non ?) mais en utilisant des sockets UDP. Je me suis vite rendu compte que ce n'était pas le protocole idéal étant donné qu'il cible une seule machine ou toutes les machines du réseau si on envoi vers un masque de sous réseau.

    Ce que je souhaite c'est que plusieurs machines puissent récupérer ses données mais seulement celles qui en ont besoin et pas tout le réseau... Sinon, vive l'engorgement !

    J'ai donc pensé aux sockets mais TCP avec donc une notion de connexion, seules les machines connecté au socket peuvent récupérer les données. L'application qui génère les données serait donc "serveur" et "client" en même temps car elle hébergerait la socket et écrirait les données venant de la dll sur la socket, les autres applications tiers lirai simplement le contenu de la socket.

    Est-ce que je fais un bon choix en mettant en place une socket TCP ? Je ne vois pas d'autres moyens de mettre ça en place...

    Merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    En partant sur les sockets, je ferai différemment:
    1. Un thread qui lit les données, et les ajoutes à une file d'attente (avec une variable de type file)
    2. Un deuxième thread qui lit cette file d'attente, et "dispatch" les messages (voir le point 3)
    3. Un thread par client, qui lit sa file d'attente et poste le message

    Chaque client "demande", par exemple via un socket, la connexion au serveur. Et c'est le serveur qui se connecte au client, en lançant un thread dédié.

    Les files gèrent nativement le multi-thread, donc la synchronisation n'est pas compliquée. De plus, les envois vers les clients n'influent pas la lecture des données ( files séparées, threads séparés), et seuls les client connectés reçoivent les données.
    OK, ça fait pas mal de choses à mettre en place, mais ça ne me semble pas insurmontable.

    Sinon il y a aussi MSMQ qui me semble pertinent, mais je ne connais pas assez. Jurrasic Pork nous a mis un tutoriel ici, c'est une bonne base pour commencer.

    Tatayo.

  3. #3
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Merci tatayo pour ta proposition, très intéressante !

    Par contre, je ne pense pas avoir besoin de file d'attente pour les données, car les postes qui vont se connecter à un instant T n'auront pas besoin de récupérer les données générées antérieurement. Ce sont des données "temps réel" captées par la dll en fait.

    Mais dans ton cas, on enverrai les données indépendamment à chaque client ?

    Je pensais plutôt à un flux comme un flux streaming auquel les clients se connecte.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Justement, la file d'attente pour un "client" n'est créée qu'à la connexion de ce dernier, et détruite lors de la déconnexion.
    La première file d'attente permet juste au thread de lecture des données de faire le strict minimum et de ne pas être "perturbé" par l'intendance. Elle sert en fait de buffer.

    A charge au deuxième thread de gérer la liste des connexion, par exemple dans un tableau, et de dispatcher les données dans les files qui seront traités par les threads "clients".

    Tatayo.

  5. #5
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Je n'ai pas trop le choix finalement...

    Seul un "serveur" peut lire des données avec SocketLit() ?! Un "client" lui peut uniquement écrire des données sur la socket d'un pc distant ?!

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 303
    Points : 812
    Points
    812
    Par défaut
    Bonjour,

    Est-tu certain de ce que tu écris ?

    Citation Envoyé par WDKyle Voir le message
    Seul un "serveur" peut lire des données avec SocketLit() ?! Un "client" lui peut uniquement écrire des données sur la socket d'un pc distant ?!
    Les sockets connectés (protocole TCP) sont en lecture/écriture, aussi bien côté serveur que côté client.

    Dixit l'aide en ligne de la fonction SocketLit
    http://doc.pcsoft.fr/fr-FR/?3070014

    Citation Envoyé par Aide en ligne Windev
    Récupère un message envoyé par une autre socket. Cette fonction peut être utilisée sur un poste client ou un poste serveur.
    Bon dév !

  7. #7
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Non j'avais dis des bêtises

    J'ai mis en place un serveur de socket TCP et j'écris indépendamment dans chaque canal de socket cliente depuis ce serveur, cela fonctionne très bien

    La lecture s'effectue parfaitement du coté client.

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

Discussions similaires

  1. Question existentielle
    Par jadey dans le forum C++
    Réponses: 12
    Dernier message: 21/04/2006, 15h00
  2. Question existentielle : Que signifie X dans MAC oS X?
    Par oOoOuuhmAn dans le forum Apple
    Réponses: 8
    Dernier message: 03/04/2006, 11h37
  3. Question NAT + communication web !
    Par niglo dans le forum Développement
    Réponses: 9
    Dernier message: 30/03/2006, 17h22
  4. une autre question niveau communication
    Par gctom dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 15/01/2006, 23h25
  5. [Jdialog] Question sur communication entre fenetre
    Par Oreste dans le forum Agents de placement/Fenêtres
    Réponses: 7
    Dernier message: 17/03/2005, 11h23

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