TOUT -|- TOUT sur le visuel -|- TOUT sur la logistique
From: Sébastien Libert <sebastien.libert@sogid.com>
To: "'java@u-strasbg.fr'" <java@u-strasbg.fr>
Subject: Servlet - Connection interrompue
Date sent: Mon, 12 Mar 2001 10:38:09 +0100
Send reply to: java@u-strasbg.fr
Salut la liste !
Dans une servlet, je réalise un traitement assez lourd. Hors, les
utilisateurs sont de grands impatients et ils ont tendance à recliquer sur
le lien quand le traitement dure un peu. Donc, dès qu'ils recliquent sur
le lien qui lance la servlet, j'ai un processus de plus qui se lance,
c'est deux fois plus lent, et ainsi de suite.
Quelqu'un sait-il comment on peut détecter qu'une connection Http entre le
navigateur et la servlet est rompue afin qu'elle arrête de travailler pour
rien... ?
Sébastien Libert.
SOGID.
From: EPAUD Florent <fepaud@ebc-informatique.com>
To: "'java@u-strasbg.fr'" <java@u-strasbg.fr>
Subject: RE: Servlet - Connection interrompue
Date sent: Mon, 12 Mar 2001 14:36:29 +0100
Send reply to: java@u-strasbg.fr
Quand tu fais un out.println() et que ca plante, c'est connection http est
perdue. Pas d'autre solution si tu fais du http !
Par contre tu peux afficher à l'utilisateur un message d'attente, c'est ca
la meilleure solution.
Florent EPAUD www.e-pc.fr
* 03 88 26 62 26 Ligne directe
* fepaud@ebc-informatique.com
-----Message d'origine-----
De: Sébastien Libert [SMTP:sebastien.libert@sogid.com]
Date: lundi 12 mars 2001 10:38
À: 'java@u-strasbg.fr'
Objet: Servlet - Connection interrompue
Salut la liste !
Dans une servlet, je réalise un traitement assez lourd. Hors, les
utilisateurs sont de grands impatients et ils ont tendance à recliquer sur
le lien quand le traitement dure un peu.
Donc, dès qu'ils recliquent sur le lien qui lance la servlet, j'ai
un processus de plus qui se lance, c'est deux fois plus lent, et ainsi de
suite.
Quelqu'un sait-il comment on peut détecter qu'une connection Http
entre le navigateur et la servlet est rompue afin qu'elle arrête de
travailler pour rien... ?
Sébastien Libert.
SOGID.
From: EPAUD Florent <fepaud@ebc-informatique.com>
To: "'java@u-strasbg.fr'" <java@u-strasbg.fr>
Subject: RE: Servlet - Connection interrompue
Date sent: Mon, 12 Mar 2001 15:27:09 +0100
Send reply to: java@u-strasbg.fr
Non tu ne pourras jamais savoir si une requete HTTP est une erreur (et a
été avortée) ou pas. Pas avant d'avoir découvert que le canal de
communication (le printwriter) est perdu.
Une solution serait de regrouper par adresse IP : une seule réponse par
adresse. Mais même ca tu ne peux pas le faire car 20 requetes émanant du
même utilisateur peuvent venir de 20 fenetres différentes, et donc
méritent toutes une réponse !
Je ne vois qu'une solution "viable" : tu mets tes traitements dans un
"pipe" intelligent qui ne fait pas deux fois de suite le même calcul mais
retourne le résultat. Dur dur.
A+
Florent EPAUD www.e-pc.fr
* 03 88 26 62 26 Ligne directe
* fepaud@ebc-informatique.com
-----Message d'origine-----
De: Sébastien Libert [SMTP:sebastien.libert@sogid.com]
Date: lundi 12 mars 2001 15:29
À: 'java@u-strasbg.fr'
Objet: RE: Servlet - Connection interrompue
Je crois que je me suis mal exprimé.
Quand un utilisateur clique sur un lien http, le navigateur fait une
connexion vers le serveur web et réclame l'objet qui est derrière ce lien.
Lorsque cet objet tarde à venir, il est tout à fait possible pour
l'utilisateur de cliquer sur un autre lien (ou sur le même lien, peu
importe). On a tous fait ça un jour, une page HTML qui n'arrive pas, hop
on clique sur un autre lien.
Dans ce cas, le nouveau click fait faire au navigateur une nouvelle
connexion, et ce faisant, il abandonne la première connexion toujours en
cours.
C'est cela que je souhaite détecter. Si l'utilisateur clique
ailleurs (ou une seconde fois sur le lien), le premier processus qui a été
déclenché n'a plus de raison d'être, donc je peux le faire s'arrêter et ne
plus consomer de ressources machine.
Sinon, scénario catastrophe, un utilisateur clique 20 fois d'affilée sur
mon lien et me fusille ma servlet avec un joli "Stack Overflow"
Une idée ?
Sébastien Libert.
SOGID.
> -----Message d'origine-----
> De: EPAUD Florent [SMTP:fepaud@ebc-informatique.com]
> Date: lundi 12 mars 2001 14:36
> À: 'java@u-strasbg.fr'
> Objet: RE: Servlet - Connection interrompue
>
> Quand tu fais un out.println() et que ca plante, c'est connection
http est
> perdue. Pas d'autre solution si tu fais du http !
>
> Par contre tu peux afficher à l'utilisateur un message d'attente,
c'est ca
> la meilleure solution.
>
>
> Florent EPAUD www.e-pc.fr
> * 03 88 26 62 26 Ligne directe
> * fepaud@ebc-informatique.com
>
> -----Message d'origine-----
> De: Sébastien Libert [SMTP:sebastien.libert@sogid.com]
> Date: lundi 12 mars 2001 10:38
> À: 'java@u-strasbg.fr'
> Objet: Servlet - Connection interrompue
>
> Salut la liste !
>
> Dans une servlet, je réalise un traitement assez lourd.
Hors, les
> utilisateurs sont de grands impatients et ils ont tendance à
recliquer sur
> le lien quand le traitement dure un peu.
>
> Donc, dès qu'ils recliquent sur le lien qui lance la
servlet, j'ai
> un processus de plus qui se lance, c'est deux fois plus lent, et
ainsi de
> suite.
>
> Quelqu'un sait-il comment on peut détecter qu'une connection Http
> entre le navigateur et la servlet est rompue afin qu'elle arrête
de
> travailler pour rien... ?
>
>
>
> Sébastien Libert.
> SOGID.
>
From: Sébastien Libert <sebastien.libert@sogid.com>
To: "'java@u-strasbg.fr'" <java@u-strasbg.fr>
Subject: RE: Servlet - Connection interrompue
Date sent: Mon, 12 Mar 2001 15:28:49 +0100
Send reply to: java@u-strasbg.fr
Je crois que je me suis mal exprimé.
Quand un utilisateur clique sur un lien http, le navigateur fait une
connexion vers le serveur web et réclame l'objet qui est derrière ce lien.
Lorsque cet objet tarde à venir, il est tout à fait possible pour
l'utilisateur de cliquer sur un autre lien (ou sur le même lien, peu
importe). On a tous fait ça un jour, une page HTML qui n'arrive pas, hop
on clique sur un autre lien. Dans ce cas, le nouveau click fait faire au
navigateur une nouvelle connexion, et ce faisant, il abandonne la première
connexion toujours en cours.
C'est cela que je souhaite détecter. Si l'utilisateur clique ailleurs (ou
une seconde fois sur le lien), le premier processus qui a été déclenché
n'a plus de raison d'être, donc je peux le faire s'arrêter et ne plus
consomer de ressources machine.
Sinon, scénario catastrophe, un utilisateur clique 20 fois d'affilée sur
mon lien et me fusille ma servlet avec un joli "Stack Overflow"
Une idée ?
Sébastien Libert.
SOGID.
> -----Message d'origine-----
> De: EPAUD Florent [SMTP:fepaud@ebc-informatique.com]
> Date: lundi 12 mars 2001 14:36
> À: 'java@u-strasbg.fr'
> Objet: RE: Servlet - Connection interrompue
>
> Quand tu fais un out.println() et que ca plante, c'est connection http
> est perdue. Pas d'autre solution si tu fais du http !
>
> Par contre tu peux afficher à l'utilisateur un message d'attente, c'est
> ca la meilleure solution.
>
>
> Florent EPAUD www.e-pc.fr
> * 03 88 26 62 26 Ligne directe
> * fepaud@ebc-informatique.com
>
> -----Message d'origine-----
> De: Sébastien Libert [SMTP:sebastien.libert@sogid.com]
> Date: lundi 12 mars 2001 10:38
> À: 'java@u-strasbg.fr'
> Objet: Servlet - Connection interrompue
>
> Salut la liste !
>
> Dans une servlet, je réalise un traitement assez lourd. Hors, les
> utilisateurs sont de grands impatients et ils ont tendance à recliquer
> sur le lien quand le traitement dure un peu.
>
> Donc, dès qu'ils recliquent sur le lien qui lance la servlet, j'ai un
> processus de plus qui se lance, c'est deux fois plus lent, et ainsi de
> suite.
>
> Quelqu'un sait-il comment on peut détecter qu'une connection Http
> entre le navigateur et la servlet est rompue afin qu'elle arrête de
> travailler pour rien... ?
>
>
>
> Sébastien Libert.
> SOGID.
>
From: Laurent Forêt <l.foret@korom.net>
To: <java@u-strasbg.fr>
Subject: RE: Servlet - Connection interrompue
Date sent: Mon, 12 Mar 2001 16:52:56 +0100
Send reply to: java@u-strasbg.fr
RE: Servlet - Connection interrompueCa doit être possible de récupérer le
contexte (ServletContext) et de regarder si il y a pas déja un traitement
en cours sur ce contexte, puis l'arreter si il le faut.
De toute façon, il sera impossible de détecter un clic vers un lien d'un
autre site que le votre. _______________________Laurent Forêt -
KoroMDevelopments department -----Message d'origine-----De : Sébastien
Libert [mailto:sebastien.libert@sogid.com]Envoyé : lundi 12 mars 2001
15:29À : 'java@u-strasbg.fr'Objet : RE: Servlet - Connection interrompue
Je crois que je me suis mal exprimé.
Quand un utilisateur clique sur un lien http, le navigateur fait une
connexion vers le serveur web et réclame l'objet qui est derrière ce lien.
Lorsque cet objet tarde à venir, il est tout à fait possible pour
l'utilisateur de cliquer sur un autre lien (ou sur le même lien, peu
importe). On a tous fait ça un jour, une page HTML qui n'arrive pas, hop
on clique sur un autre lien.
Dans ce cas, le nouveau click fait faire au navigateur une nouvelle
connexion, et ce faisant, il abandonne la première connexion toujours en
cours.
C'est cela que je souhaite détecter. Si l'utilisateur clique ailleurs
(ou
une seconde fois sur le lien), le premier processus qui a été déclenché
n'a plus de raison d'être, donc je peux le faire s'arrêter et ne plus
consomer de ressources machine.
Sinon, scénario catastrophe, un utilisateur clique 20 fois d'affilée sur
mon lien et me fusille ma servlet avec un joli "Stack Overflow"
Une idée ?
Sébastien Libert.
SOGID.
> -----Message d'origine-----
> De: EPAUD Florent [SMTP:fepaud@ebc-informatique.com]
> Date: lundi 12 mars 2001 14:36
> À: 'java@u-strasbg.fr'
> Objet: RE: Servlet - Connection interrompue
>
> Quand tu fais un out.println() et que ca plante, c'est connection http
est
> perdue. Pas d'autre solution si tu fais du http !
>
> Par contre tu peux afficher à l'utilisateur un message d'attente,
c'est
ca
> la meilleure solution.
>
>
> Florent EPAUD www.e-pc.fr
> * 03 88 26 62 26 Ligne directe
> * fepaud@ebc-informatique.com
>
> -----Message d'origine-----
> De: Sébastien Libert [SMTP:sebastien.libert@sogid.com]
> Date: lundi 12 mars 2001 10:38
> À: 'java@u-strasbg.fr'
> Objet: Servlet - Connection interrompue
>
> Salut la liste !
>
> Dans une servlet, je réalise un traitement assez lourd. Hors,
les > utilisateurs sont de grands impatients et ils ont tendance à
recliquer
sur
> le lien quand le traitement dure un peu.
>
> Donc, dès qu'ils recliquent sur le lien qui lance la servlet,
j'ai > un processus de plus qui se lance, c'est deux fois plus lent, et
ainsi
de
> suite.
>
> Quelqu'un sait-il comment on peut détecter qu'une connection
Http > entre le navigateur et la servlet est rompue afin qu'elle arrête
de > travailler pour rien... ? > > > > Sébastien Libert. >
SOGID. >
From: Sébastien Libert <sebastien.libert@sogid.com>
To: "'java@u-strasbg.fr'" <java@u-strasbg.fr>
Subject: RE: Servlet - Connection interrompue
Date sent: Mon, 12 Mar 2001 17:02:25 +0100
Send reply to: java@u-strasbg.fr
Pourtant, si je développe un serveur web en C, il me suffit de détecter un
SIG_PIPE.
N'y a-t-il rien de comparable dans les servlets ?
Sébastien Libert.
> -----Message d'origine-----
> De: Laurent Forêt [SMTP:l.foret@korom.net]
> Date: lundi 12 mars 2001 16:53
> À: java@u-strasbg.fr
> Objet: RE: Servlet - Connection interrompue
>
> RE: Servlet - Connection interrompueCa doit être possible de récupérer
> le contexte (ServletContext) et de regarder si il y a pas déja un
> traitement
en
> cours sur ce contexte, puis l'arreter si il le faut.
>
> De toute façon, il sera impossible de détecter un clic vers un lien d'un
> autre site que le votre. _______________________Laurent Forêt -
> KoroMDevelopments department -----Message d'origine-----De : Sébastien
> Libert [mailto:sebastien.libert@sogid.com]Envoyé : lundi 12 mars 2001
> 15:29À : 'java@u-strasbg.fr'Objet : RE: Servlet - Connection interrompue
> Je crois que je me suis mal exprimé.
>
> Quand un utilisateur clique sur un lien http, le navigateur fait une
> connexion vers le serveur web et réclame l'objet qui est derrière ce
> lien. Lorsque cet objet tarde à venir, il est tout à fait possible pour
> l'utilisateur de cliquer sur un autre lien (ou sur le même lien, peu
> importe). On a tous fait ça un jour, une page HTML qui n'arrive pas, hop
on
> clique sur un autre lien.
>
> Dans ce cas, le nouveau click fait faire au navigateur une nouvelle
> connexion, et ce faisant, il abandonne la première connexion toujours en
> cours.
>
> C'est cela que je souhaite détecter. Si l'utilisateur clique ailleurs
(ou
> une seconde fois sur le lien), le premier processus qui a été déclenché
n'a
> plus de raison d'être, donc je peux le faire s'arrêter et ne plus
> consomer de ressources machine.
>
> Sinon, scénario catastrophe, un utilisateur clique 20 fois d'affilée
> sur
> mon lien et me fusille ma servlet avec un joli "Stack Overflow"
>
>
>
> Une idée ?
>
> Sébastien Libert.
> SOGID.
>
> > -----Message d'origine-----
> > De: EPAUD Florent [SMTP:fepaud@ebc-informatique.com]
> > Date: lundi 12 mars 2001 14:36
> > À: 'java@u-strasbg.fr'
> > Objet: RE: Servlet - Connection interrompue
> >
> > Quand tu fais un out.println() et que ca plante, c'est connection
> > http
> est
> > perdue. Pas d'autre solution si tu fais du http !
> >
> > Par contre tu peux afficher à l'utilisateur un message d'attente,
c'est
> ca
> > la meilleure solution.
> >
> >
> > Florent EPAUD www.e-pc.fr
> > * 03 88 26 62 26 Ligne directe
> > * fepaud@ebc-informatique.com
> >
> > -----Message d'origine-----
> > De: Sébastien Libert [SMTP:sebastien.libert@sogid.com]
> > Date: lundi 12 mars 2001 10:38 À: 'java@u-strasbg.fr'
> > Objet: Servlet - Connection interrompue
> >
> > Salut la liste !
> >
> > Dans une servlet, je réalise un traitement assez lourd. Hors,
les
> > utilisateurs sont de grands impatients et ils ont tendance à
> > recliquer
> sur
> > le lien quand le traitement dure un peu.
> >
> > Donc, dès qu'ils recliquent sur le lien qui lance la servlet,
j'ai
> > un processus de plus qui se lance, c'est deux fois plus lent, et
> > ainsi
> de
> > suite.
> >
> > Quelqu'un sait-il comment on peut détecter qu'une connection
Http
> > entre le navigateur et la servlet est rompue afin qu'elle arrête de
> > travailler pour rien... ?
> >
> >
> >
> > Sébastien Libert.
> > SOGID.
> >
> << Fichier: ATT00014.html>>
From: Sébastien Libert <sebastien.libert@sogid.com>
To: "'java@u-strasbg.fr'" <java@u-strasbg.fr>
Subject: RE: Servlet - Connection interrompue
Date sent: Mon, 12 Mar 2001 17:40:41 +0100
Send reply to: java@u-strasbg.fr
> -----Message d'origine-----
> De: alexandre Pierlot [SMTP:apierlot@soleri.com]
> Date: lundi 5 mars 2001 17:13
> À: java@u-strasbg.fr
> Objet: Re: Servlet - Connection interrompue
>
> Je me mêle de votre conversation alors que je suis pas un expert
> servlet,
mais ton exemple de SIG_PIPE avec un serveur web en C te permet de
récupérer un appel à ton serveur ? (ou du moins tout signal qui arrive à
ton serveur) > parce que dans ce cas, toutes les requêtes HTTP qui vont
arriver à ta servlet depuis un de tes clients, est intercepté et tu peux
te débrouiller pour savoir d'où elle vient, ce qu'elle te demande, etc...
Donc tu peux mettre en place tout un traitement qui fera ce que tu veux
(comme l'ex de la file d'attente).
Je travaille avec IIS4 - 5 et Apache sous Linux.
Je citais ce SIG_PIPE en exemple.
J'ai développé (il y a une éternité) un petit serveur web qui gérait un
pool de x threads. Et nous avions trouvé à l'époque que lorsque
l'utilisateur change d'avis, et qu'il clique sur un autre lien (ou qu'il
fait RELOAD), nous recevions un SIG_PIPE sur ce thread. Cela nous
permettait de mettre fin au traitement et de réinitialiser le thread
proprement.
Je pensais trouver quelque chose d'équivalent dans les servlets, mais je
nage.
La proposition du ServletContext... je ne vois pas ce que je peux trouver
à ce niveau.
>
> PS : en fait j'ai pas vraiment compris ou se situait ton vrai pb, étant
donné que tu récupères toutes les requêtes HTTP et que tu peux donc
controler le comportement de ton serveur.
Mon problème à la base est que les utilisateurs ont tendance à cliquer
plusieurs fois sur un lien qui entraine un traitement lourd du côté de la
servlet (génération d'une très grosse page HTML). Et lorsque un
utilisateur clique x fois d'affilée sur le lien, la servlet effectue x
fois le traitement alors que seul le dernier traitement sera utile.
>
> PS2 : Un clic sur un lien dans une page HTML, ne fait pas de nouvelles
connexion, il y a juste un envoi d'une nouvelle requête mais toujours dans
la même session. > Je me trompe ???
HTTP n'est-il pas un protocole "connection-less" ?
Le navigateur établit une connexion vers le serveur web, celui-ci renvoie
l'info... la connection est coupée.
D'ailleurs, le téléchargement d'une page HTML contenant des tas d'images
réclame autant de connexions... me trompe-je ?
Sébastien Libert.
SOGID.
From: Laurent Forêt <l.foret@korom.net>
To: <java@u-strasbg.fr>
Subject: RE: Servlet - Connection interrompue
Date sent: Tue, 13 Mar 2001 09:41:20 +0100
Send reply to: java@u-strasbg.fr
RE: Servlet - Connection interrompue-----Message d'origine-----
De : Sébastien Libert [mailto:sebastien.libert@sogid.com]
Envoyé : lundi 12 mars 2001 17:41
À : 'java@u-strasbg.fr'
Objet : RE: Servlet - Connection interrompue
> -----Message d'origine-----
> De: alexandre Pierlot [SMTP:apierlot@soleri.com]
> Date: lundi 5 mars 2001 17:13
> À: java@u-strasbg.fr
> Objet: Re: Servlet - Connection interrompue
>
> Je me mêle de votre conversation alors que je suis pas un expert
servlet, mais ton exemple de SIG_PIPE avec un serveur web en C te permet
de récupérer un appel à ton serveur ? (ou du moins tout signal qui arrive
à ton serveur)
> parce que dans ce cas, toutes les requêtes HTTP qui vont arriver à ta
servlet depuis un de tes clients, est intercepté et tu peux te débrouiller
pour savoir d'où elle vient, ce qu'elle te demande, etc... Donc tu peux
mettre en place tout un traitement qui fera ce que tu veux (comme l'ex de
la file d'attente).
Je travaille avec IIS4 - 5 et Apache sous Linux.
Je citais ce SIG_PIPE en exemple.
J'ai développé (il y a une éternité) un petit serveur web qui gérait un
pool de x threads. Et nous avions trouvé à l'époque que lorsque
l'utilisateur change d'avis, et qu'il clique sur un autre lien (ou qu'il
fait RELOAD), nous recevions un SIG_PIPE sur ce thread. Cela nous
permettait de mettre fin au traitement et de réinitialiser le thread
proprement.
Je pensais trouver quelque chose d'équivalent dans les servlets, mais je
nage.
La proposition du ServletContext... je ne vois pas ce que je peux
trouver
à ce niveau.
[Laurent Forêt]
A chaque fois que la servlet recois une requete de traitement
elle fait un getContext, et elle le sauvegarde dans une liste, si il est
pas deja existant puis en fait le traitement.
Si le contexte existe deja c'est qu'il y a un traitement en cours dans
ce
contexte, et dans ce cas là, tu ne fais rien .
Laurent Forêt
Service développement
l.foret@korom.net
www.korom.net