[perl] Faire une page d'attente en CGI

Faire une page d'attente en CGI [perl] - Perl - Programmation

Marsh Posté le 28-04-2004 à 02:08:49    

Bonjour, :)  
Je suis en train de developper un petit programme Perl Cgi a faire tourner sur le net. Comme il s'agit de calculer des choses qui durent un petit moment, j'ai essaye de faire une page d'attente avec un petit gif anime...  en attendant d'afficher la page de resultats. Mais je n'arrive pas a mes fins ; la page de resultat s'affiche a la suite de la page d'attente, sans la remplacer!  :pt1cable:  
 
Pour arriver a ce resultat, dans mon script perl, j'ai fait un header http puis j'ai fait print pour afficher la page d'attente, puis a la suite j'ai fait un nouvel header http puis print pour ma page de resultat...
 
Si quelqu'un peut m'aider a faire une page d'attente, ce serait sympa...
 
PS: Je pense bien qu'en specifiant dans le header http la taille de la page ca marcherait, mais je ne sais pas comment faire et en plus, comme la page est generee dynamiquement, sa taille change forcement un peu  chaque fois...
 
Merci.

Reply

Marsh Posté le 28-04-2004 à 02:08:49   

Reply

Marsh Posté le 28-04-2004 à 02:30:26    

ton cgi il génère un html qui restera le meme tant que le cgi ne sera pas réexécuté ou ton cgi doit afficher le contenu html finale?
 
dans le premier cas, tu lances le cgi, qui exécute un traitement (en exécutant un .pl par exemple), et qui ensuite te redirige vers un cgi d'attente.
 
Le cgi d'attente observe la création de ton .html, et lorsque celui-ci a la balise de fermeture du html, tu dis: bingo, c'est fini, et tu le redirige vers le html
 
dans l'autre cas, bin faut tu refresh le cgi, mais interrompt le traitement, le recommence, et ca l'a pas de fin


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 28-04-2004 à 02:56:58    

Grosso modo ma question deguisee serait:
 
Comment je peux specifier la fin d'une communication http (la fin de la page d'attente) pour pouvoir faire une nouvelle communication http (qui elle va afficher la page de resultat finale)?

Reply

Marsh Posté le 28-04-2004 à 02:59:36    

floflooo a écrit :

Grosso modo ma question deguisee serait:
 
Comment je peux specifier la fin d'une communication http (la fin de la page d'attente) pour pouvoir faire une nouvelle communication http (qui elle va afficher la page de resultat finale)?


 
en redirigeant la page (avec un js par exemple)


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 28-04-2004 à 03:17:32    

Rediriger quoi, vers ou, comment?
 

Reply

Marsh Posté le 28-04-2004 à 11:38:55    

floflooo a écrit :

Rediriger quoi, vers ou, comment?


 
ok, la personne est sur une page html disons
 
elle clique sur un lien vers ton cgi
 
une page s'ouvre, ya le ti truc qui lui dit d'attendre, donc t'a commencé à printé du html
 
si tu veux éliminer ca, faut
 
a) que tu rafraichisse la page, mais ca sert à rien parce que ca va tourner en boucle et que ton cgi va tout refaire
 
b) que tu redirige vers un html que ton cgi aura généré (donc c'est pas ton cgi qui affiche le contenu finale, le cgi ne fait que générer un fichier)
 
tu peux pas, une fois que t'a commencé à afficher du html, l'effacer et le remplacer par d'autre html sans action "client" (redirection vers une autre page, rafraichissement de la page)


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 28-04-2004 à 11:50:23    

la redirection vers un page html c'est risqué car si plusieur utilisateur requetent le CGI pendant la periode d'attente la page HTML va etre successivement ecrasée par chaque nouvelle requete avant meme d'avoir été affichée...
donc faudrait faire un fichier html avec un identifiant de session dans le nom, mais apres faudrait la supprimer... trop bidouillatoire...
 
en fait ce qu'il te faut c'est de la persistance: ton CGI garde un contexte d'une execution à l'autre, et tu le redirige vers lui meme
 
Sinon tu as encore d'autre solutions-bidouilles possible. Par exemple si ta page d'attente est simplement un gif animé et rien d'autre tu peux afficher ce gif par un javascript, puis une fois que ta page est calculée tu l'envoi (sans nouvel entete http) avec un "<Body onload" qui va lancer une instruction javascript pour changer l'image en un pixel transparant (regarde les script d'images aléatoire pour un exemple)
 
combien de temps dure ton attente?
si ca approche les 10 secondes il faut t'attendre à ce que certains navigateurs considerent cela comme un time out...
Dans ce cas tu a encore la solution ULTRA BIDOUILLATOIRE d'envoyer des caracteres insignifiants toutes les 3 secondes par exemple, pour que le navigateur soit content et heureux (genre des espaces ou des retours lignes...).
 
C'est ce que font certains pieges à robots: le robot suit un lien qu'un humain n'aurait pas suivi (par exemple un lien en boir sur fond noir, ou un lien sans aucun texte) qui pointe vers une page dynamique qui va lui envoyer un espace (ou autre) toutes les 2 ou 3 secondes, indefiniment. Comme ca le robot reste collé sur la page et ne detecte aucun time out, et ca ne surcharge pas le serveur...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed