Aide dans la méthode d'appel de socket non bloquante
cs_stiphan
Messages postés2Date d'inscriptionmardi 11 août 2009StatutMembreDernière intervention25 juin 2011
-
24 juin 2011 à 23:07
cs_stiphan
Messages postés2Date d'inscriptionmardi 11 août 2009StatutMembreDernière intervention25 juin 2011
-
25 juin 2011 à 20:41
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.
A voir également:
Aide dans la méthode d'appel de socket non bloquante
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 25 juin 2011 à 00:52
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)