HTTPListener - TCPListener multithread [Résolu]

Messages postés
6
Date d'inscription
vendredi 27 avril 2007
Dernière intervention
27 juillet 2007
- 20 juil. 2007 à 10:03 - Dernière réponse :
Messages postés
6
Date d'inscription
vendredi 27 avril 2007
Dernière intervention
27 juillet 2007
- 22 juil. 2007 à 12:11
Bonjour,

Je tente désepérement de créer un serveur HTTP multithread.
Mon but est de recevoir des demandes via un port défini (8080) de faire un travail et de leurt répondre.

Mon problème est que le travail à faire dure plusieurs secondes, j'ai donc essayé de faire du multithread, mais là aussi j'ai des problèmes.

Je lance dans un backgroundworker avec un httplistener.getcontext()
Quand j'ai un context, je lance un thread pour le gérer.
Mon problème est que sur le port 8080 je ne reçois le context suivant que quand j'ai fait un close
response = context.Response;
...
output = response.OutputStream;
output.Write(buffer, 0, buffer.Length);
output.Close();

Donc en fait il ne tourne pas en multithread mais gère les arrivées les unes après les autres.

J'ai essayé de me passer du HTTPListener et de le faire avec un TCPListener mais j'ai le même problème, qualqu'un peut-il m'aider?

Merci
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
2717
Date d'inscription
vendredi 28 juin 2002
Dernière intervention
13 janvier 2016
21 juil. 2007 à 21:34
3
Merci
salut,

tu n'es pas obligé
d'utiliser un backgroundworker...l'appel asynchrone par BeginGetContext
et EndGetContext fait déjà le travail de création de thread...

d'ailleurs, ce n'est pas vraiment l'utilisation d'un backgroundworker qui est plutot réservé à la mise à jour async de l'IHM...
http://msdn2.microsoft.com/fr-fr/library/system.net.httplistener.begingetcontext(VS.80).aspx

ah, oui et puis, il faut que le thread principale ne s'arrête pas avant les autres sinon tout s'arrête...

ShareVB

Merci ShareVB 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de ShareVB
Meilleure réponse
Messages postés
6
Date d'inscription
vendredi 27 avril 2007
Dernière intervention
27 juillet 2007
22 juil. 2007 à 12:11
3
Merci
J'ai pu résoudre mon problème.
En fait il n'existait pas :)
Pour tester mon code, je lançais dans firefox, 2 onglets qui se connectaient à localhost:8080, et firefox n'envoie apparement la demande du 2ème onglet que quand le premier est terminé et donc mes thread sont lancés les uns après les autres :)

Si je lance une requète sous IE et une sous firefox tout marche nickel.

Merci de votre aide

Merci carbonejf 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de carbonejf
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
21 juil. 2007 à 00:17
0
Merci
Salut,

D'après la doc de la classe HttpListener :
Le modèle synchrone est approprié si votre application doit rester bloquée en attendant une demande du client et si vous ne souhaitez traiter qu'une demande à la fois. À l'aide du modèle synchrone, appelez la méthode GetContext qui attend qu'un client envoie une demande. La méthode vous retourne un objet HttpListenerContext à traiter lorsqu'une demande est reçue.

Dans le modèle asynchrone plus complexe, votre application ne reste pas bloquée en attendant des demandes et chaque demande est traitée dans son propre thread d'exécution. Utilisez la méthode BeginGetContext pour spécifier une méthode définie par l'application à appeler pour chaque requête entrante. Dans cette méthode, appelez la méthode EndGetContext pour obtenir la demande, traitez-la et répondez-y.

Bon courage :-)

/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.