Aide dans la méthode d'appel de socket non bloquante

Signaler
Messages postés
2
Date d'inscription
mardi 11 août 2009
Statut
Membre
Dernière intervention
25 juin 2011
-
Messages postés
2
Date d'inscription
mardi 11 août 2009
Statut
Membre
Dernière intervention
25 juin 2011
-
Bonjour à tous,

Je viens vers vous car je suis sur un programme dans le cadre de mon boulot dont la partie client serveur me donne du fil à retordre !
Tout d'abord je précise que je ne suis pas expert en VB.NET, juste passer du temps à apprendre seul ayant des bases de C et C++.

[Description du programme]
Un serveur lit en réseau un fichier évoluant au cours du temps. Cette tâche se charge de récupérer les nouveaux messages utiles dans le fichier et les stockés pour impression ou autre. Cette interrogation est déclenché via timer toutes les 10 minutes.
Le serveur propose de plus une partie graphique pour rédiger des messages avec une auto-complétion en utilisant une "base de données" et les imprimer.

Un client doit proposer le même service de rédaction de message tout en utilisant la même base de données que le serveur et envoyer ces messages dans un spooler maison (l'imprimante est reliée via port série) sur le serveur pour impression.

Le client doit donc être informé via réseau d'une modification de la base de donnée et recevoir la nouvelle. Il doit aussi envoyer ces messages à imprimer. Et partager divers infos (heure, ressources communes...).
Tout ces transfert ont des tailles de 10 à 100 ko.
Et surtout, le serveur doit pouvoir fonctionner si le client crash.

[Problème]
Mon soucis est de trouver le meilleur moyen de mettre le serveur en écoute au moment où le client doit envoyer des infos ou en recevoir sachant que cette attente ne doit pas pénaliser le reste du travail du serveur.

Les sockets avec attente de connexion asynchrones me semblent le mieux, le hic étant que mon projet se compose de pas mal de module et lorsque l'appel du sub qui a lancé l'attente asynchrone se termine, l'attente se termine avec lui... Je ne vois que l'utilisation d'un timer qui lance l'attente asynchrone avec une condition en utilisant un poll pour vérifier qu'un client est bien présent toutes les n minutes. Mais à ce moment là, on perd tout l'intérêt des écoute et traitement asynchrones.

Mes connaissances étant limitées je ne vois pas d'autres moyen... et les jours passés sur msdn ne m'aident plus beaucoup.

Je suis donc preneur de toutes vos idées afin de pouvoir trouver un moyen d'avoir un serveur en attente asynchrone de message du client et que cette attente ne soit ni une boucle infinie empêchant les autres tâches du serveur, ni liée à un timer.

J'espère avoir été à peu près clair... N'hésitez pas à poser vos questions.

3 réponses

Messages postés
14770
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 février 2021
151
Bonjour,

Regardes du coté des threads, et aussi du contrôle BackgroundWorker.

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Salut

As-tu regardé parmi les sources du site <comme celle-ci> pour voir comment ils traitent ce problème ?
Pour moi, adepte du Winsock de VB6, un socket possède des évènements qui se déclenchent lors des arrivées de données. L'envoi de données à plusieurs clients pouvant être géré simplement.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
2
Date d'inscription
mardi 11 août 2009
Statut
Membre
Dernière intervention
25 juin 2011

Merci, en effet j'ai trouvé la méthode pour créer des handle sur l'état d'une classe socket dans le code du site.