J'essaie d'écrire une application Web simple à l'aide de la bibliothèque de prototypes Tornado et JS. Donc, le client peut exécuter un travail de course longue sur le serveur. Je souhaite que ce travail fonctionne de manière asynchrone - de sorte que d'autres clients puissent voir la page et faire des choses là-bas.
Voici ce que j'ai: P>
<html> <head> <title>{{ title }}</title> <script type="text/javascript" language="JavaScript" src="{{ static_url("js/prototype.js")}}"></script> <script type='text/javascript' language='JavaScript'> offset=0 last_read=0 function test(){ new Ajax.Request("http://172.22.22.22:8888/longPolling", { method:"get", asynchronous:true, onSuccess: function (transport){ alert(transport.responseText); } }) } </script> </head> <body> Current time is {{c_time}} <br> <input type="button" value="Test" onclick="test();"/> </body> </html>
4 Réponses :
Tornado est serveur Web à filetage unique. Votre boucle tandis que dans Vous pouvez réécrire cette méthode comme celle-ci: p> Vous devez ajouter wait_for_smith code> La méthode bloque la tornade.
temps d'importation code> en haut pour faire ce travail. p> p>
J'ai essayé cette méthode et peut confirmer que cela ne se bloque plus, mais le programme affiche maintenant une zone d'alerte où le responsable ne est pas défini et une erreur 405.
Parallèlement trop vite, le problème était à ma fin ... J'ai eu deux adresses différentes spécifiées. Cela fonctionne définitivement.
Mais est-ce long-interrogation? On dirait que je me sondre juste à moi. Pensez que je suis moi-même un débutant tornade / comète moi-même.
J'ai converti l'exemple de chat de Tornado pour exécuter sur gevent . Jetez un coup d'œil à La démo en direct ici et L'explication et le code source ici . P>
Il utilise des threads de niveau utilisateur léger ( Greenlets ) et est comparable Utilisation de vitesse / mémoire avec Tornado. Toutefois, le code est simple, vous pouvez appeler Sleep () et Urlopen () dans vos gestionnaires sans bloquer tout le processus et vous pouvez accéder à des travaux de course à long terme qui font de même. Sous la capot, l'application est asynchrone, alimentée par une boucle d'événement écrite en C ( libefent ). p>
Vous pouvez lire le Introduction ici . P>
function test(){ new Ajax.Request("/longPolling", { method:"get", asynchronous:true, onSuccess: function (transport){ alert(transport.responseText); } }) }
Dans le cas de ports non par défaut, tout le chemin doit être passé.
J'ai lu le livre appelé "Construire l'utilisateur en temps réel Expérience " par Ted Roden, et c'était très utile. J'ai réussi à créer un système de discussion en temps réel complexe à l'aide de Tornado (Python). Je recommande que ce livre soit lu ainsi que "Fondations de la programmation de réseau Python" par John Goerzen. < / p>