File d'attente

Signaler
Messages postés
5
Date d'inscription
vendredi 18 mars 2005
Statut
Membre
Dernière intervention
20 mars 2005
-
Messages postés
5
Date d'inscription
vendredi 18 mars 2005
Statut
Membre
Dernière intervention
20 mars 2005
-
Bien le bonjour :)

Hem, alors voila, je vais essayer d'expliquer clairement mon problème. Dans le cadre des projets industriels que tout élève a à réaliser dans mon école, il m'est incombé, a mon binôme et à moi, la tâche de réaliser une application de visualisations d'emploi du temps en Asp .Net pour une boite de programmes d'optimisation.

Bon, l'affichage de l'emploi du temps, c'est fait, la partie moteur de calcul aussi (de toute facon, c'est entierement c#, donc cela ne concerne pas mon probleme ^^) mais il me reste un probleme, c'est la gestion des acces concurrents. En effet, je suis censé disposer de plusieurs serveurs de calculs, donc le serveur web sert a centraliser les requetes et resultats, et redirige les clients connectés vers les serveurs, ou les place en file d'attente si il n'y a plus de place. Et c'est justement cette file d'attente qui me pose probleme.

Dans la version Java a laquelle j'ai eu acces, j'ai vu que sur le serveur, il existait une application qui recuperait les requetes du client sur la page jsp et les placait en file d'attente le cas echéant. Le probleme, c'est qu'au niveau de l'ASP .net (et la, je vais voir si je suis une quiche en programmation ou pas :D) c'est qu'il me semble qu'une instance de l'application Web est crée a chaque fois qu'un client se connecte au serveur web. Ou alors je me trompe...

Je n'ai donc aucun moyen de gerer une file d'attente regroupant tous les clients sans passer par une application située sur le serveur Web, et recuperer des messages issus du code behind de l'app Web en passant par des Sockets ou autres grivoiseries du genre :/ Et ca m'inquiete un petit peu, tout ca, parce que moi, le C#, l'asp .net, j'apprends tout sur le tas sachant que j'ai fait que du java auparavant.

Donc ma question, au final, c'est "Est ce qu'il existe une gestion de file d'attente de clients en asp .net?" Difficile de faire plus court :)

Je vous prie d'etre indulgent avec ma manifeste inculture

Merci d'avance

7 réponses

Messages postés
5
Date d'inscription
vendredi 18 mars 2005
Statut
Membre
Dernière intervention
20 mars 2005

Je précise aussi que j'ai épluché la msdn et google et que j'ai rien trouvé qui me satisfasse

Mais je crois quand meme aux miracles
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
23
oula, j'ai pas tout compris, et j'ai pas envie de chercher à comprendre tout de suite, pas un vendredi soir



Moi je te propose une autre solution, apparement tu connais Java, as tu
le droit de t'en servir ? si oui t'as finit ton problème (reste plus
qu'a coder )



donc tu fais un service web en java qui te fais ce que tu veux, ensuite tu fais un appel à ce service web avec asp.net.



Les services web est un standard du W3C donc tu peux en faire en java,
et c'est la meilleure facon de faire cohabiter deux langages.



Sinon, non il n'y a pas une instance de l'application chaque
requete, mais c'est une instance de la page qui est créer à chaque
requete, une instance dans l'application est fermé 10 min aprés la fin
de la derniere session (qui se termine 20min aprés la derniere requete
d'un client) (valeurs par défaut)



j'espere que j'ai répondu à peu prés à ton problème, sinon je relirais
ce que tu nous dit. Parce que une gestion de file d'attente, je vois
pas ce que tu veux faire par la, tout ce qui est file d'attente etc...
laisse asp.net/IIS/SQL server s'en occupait c'est lors boulot :P (apres
tu peux faire des appels asynchrone t'amuser avec des threads, mais la
c'est limite de l'asp.net )



++


<hr>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
Messages postés
5
Date d'inscription
vendredi 18 mars 2005
Statut
Membre
Dernière intervention
20 mars 2005

Bein le cahier des charges stipule que ce soit du 100% .Net, sinon, ca serait deja moins compliqué

La gestion de file d'attente, c'est pour pouvoir mettre les clients en statut idle en attendant qu'un serveur de calcul se libere. Ca irait plus vite à expliquer avec un schéma, en fait...

Par contre si tu me dis que IIS gere les files d'attentes, je vais regarder ca d'un peu plus pres, alors...

Merci, et je tiens au courant si j'ai du nouveau ^^
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
23
Je viens de relire ton premier post.



Ton problème, c'est que si tu peux pas traiter la demande, tu mettes le client en attente ? est-ce bien ca ?



En gros tu as 10 serveurs pour faire tes calculs, tu met 3 sec pour faire tes calcules.



En 3 sec tu as eu 15 clients, donc 5 clients ne peuvent pas faire les
calculs, t'aimerais donc que les 5 derniers clients reviennent dans
quelques seconde le temps qu'il y a un serveur de libre ?



Si c'est ca, non IIS ne le permet pas (ou peut etre mais je sais pas
comment configurer le bazar) mais tu peux aisement faire ca avec les
variables application et le global.asax.



Tu peux me donner quelques précisions sur le type de calculs ?

<hr>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
Messages postés
5
Date d'inscription
vendredi 18 mars 2005
Statut
Membre
Dernière intervention
20 mars 2005

C'est exactement ca :)

Le type de calcul, bein, en gros, on part d'un fichier de données contenant des employés et des tâches a effectuer, d'un fichier de programme comprenant l'algorithme de traitement de ces données, et on sort un fichier solution ou chaque tâche est assignée a un employé. Bon, recuperer ces données sur le serveur web, apres, ca, ca va. Les calculs, faut compter, disons... 25-30 secondes si le fichier de données est pas trop volumineux.

Donc oui, il faut que je mette en attente les 5 clients arrivés apres, et que je les rebalance sur un serveur dès qu'il se libere.

Si je crée une Queue dans mon code-behind, ca va etre la même pour tous les connectés, ou elle sera recrée pour chaque client?
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
23
Si tout tes serveurs tourne sous IIS, je sais qu'il existe pour windows
server 2003 un systeme de repartiteur de charge, je ne sais pas comment
il fonctionne, je sais juste qu'il existe, regarde peut etre de ce coté
si ca peut t'aider.



Sinon c'est assez simple.



En gros dans le global.asax tu as une méthode déclenché au début de chaque requete :



private sub beginrequest(blablabla)



for each s as string in Application("ServeurLibre").split("|")

response.redirect("boulot.aspx?serveur="& s)

next

response.redirect("attend.aspx")



end sub


dans la page boulot.aspx tu peux faire



new thread(goboulot(request.querystring("serveur")))

application("serveurlibre") = application("serveurlibre").split("|").remove(request.querystring("serveur")).join("|")



lol, le code est carrement faut, mais c'est pour te donner une idée, faut évidement bosser tout ca ;)



le dictionnaire Application est le meme pour toutes les requetes, donc
tu peux stocker tes variables la dedans et les retrouver quand tu veux.
Attention tout de meme, car la variable application est perdus 10
minutes aprés la fin de la derniere session, soit 30 minutes aprés la
derniere requete.



Quand l'application se relance, l'evenement application_start du global.asax est appellé.



Voila en gros ce que je te conseil de faire, bien sur il y a un peu de boulot, mais bon rien de birn compliqué :)




<hr>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
Messages postés
5
Date d'inscription
vendredi 18 mars 2005
Statut
Membre
Dernière intervention
20 mars 2005

Ok ok...

Bein merci bien, j'ai plus qu'a potasser tout ca :)