Je voudrais être en mesure d'exécuter certaines fonctions de nettoyage si et seulement si le client termine avec succès le téléchargement d'un fichier que je desserve en utilisant Tornado.Comment appelez-vous la fonction après que le client termine le téléchargement du serveur Web tornado?
J'ai installé l'outil d'accélérateur firefox et l'avait ralentir la connexion vers le bas à la vitesse d'accès à distance et installé ce gestionnaire pour générer un tas de texte aléatoire des déchets:
class CrapHandler(BaseHandler):
def get(self, token):
crap = ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(100000))
self.write(crap)
print "done"
Je reçois la sortie suivante de tornade immédiatement après avoir fait la demande:
done
I 100524 19:45:45 web:772] 200 GET /123 (192.168.45.108) 195.10ms
Le client continue ensuite son téléchargement pendant environ 20 secondes. Je m'attendais à ce que l'impression soit faite "après" que le client ait fini.
Aussi, si je fais ce qui suit, je reçois à peu près le même résultat:
class CrapHandler(BaseHandler):
@tornado.web.asynchronous
def get(self, token):
crap = ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(100000))
self.write(crap)
self.finish()
print "done"
Suis-je manque quelque chose de fondamental ici? Le tornado peut-il même supporter ce que j'essaie de faire? Sinon, existe-t-il une alternative?
Comment on_connection_close gère-t-il les keepalives http? La connexion restera-t-elle ouverte entre les demandes dans ce cas? – Shabbyrobe