Note that there are some explanatory texts on larger screens.

plurals
  1. POAsynchronous COMET query with Tornado and Prototype
    text
    copied!<p>I'm trying to write simple web application using Tornado and JS Prototype library. So, the client can execute long running job on server. I wish, that this job runs Asynchronously - so that others clients could view page and do some stuff there.</p> <p>Here what i've got:</p> <pre><code>#!/usr/bin/env/ pytthon import tornado.httpserver import tornado.ioloop import tornado.options import tornado.web from tornado.options import define, options import os import string from time import sleep from datetime import datetime define("port", default=8888, help="run on the given port", type=int) class MainHandler(tornado.web.RequestHandler): def get(self): self.render("templates/index.html", title="::Log watcher::", c_time=datetime.now()) class LongHandler(tornado.web.RequestHandler): @tornado.web.asynchronous def get(self): self.wait_for_smth(callback=self.async_callback(self.on_finish)) print("Exiting from async.") return def wait_for_smth(self, callback): t=0 while (t &lt; 10): print "Sleeping 2 second, t={0}".format(t) sleep(2) t += 1 callback() def on_finish(self): print ("inside finish") self.write("Long running job complete") self.finish() def main(): tornado.options.parse_command_line() settings = { "static_path": os.path.join(os.path.dirname(__file__), "static"), } application = tornado.web.Application([ (r"/", MainHandler), (r"/longPolling", LongHandler) ], **settings ) http_server = tornado.httpserver.HTTPServer(application) http_server.listen(options.port) tornado.ioloop.IOLoop.instance().start() if __name__ == "__main__": main() </code></pre> <p>This is server part. It has main view (shows little greeting, current server time and url for ajax query, that executes long running job. If you press a button, a long running job executes. And server hangs :( I can't view no pages, while this job is running. Here is template page:</p> <pre><code>&lt;html&gt; &lt;head&gt; &lt;title&gt;{{ title }}&lt;/title&gt; &lt;script type="text/javascript" language="JavaScript" src="{{ static_url("js/prototype.js")}}"&gt;&lt;/script&gt; &lt;script type='text/javascript' language='JavaScript'&gt; 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); } }) } &lt;/script&gt; &lt;/head&gt; &lt;body&gt; Current time is {{c_time}} &lt;br&gt; &lt;input type="button" value="Test" onclick="test();"/&gt; &lt;/body&gt; &lt;/html&gt; </code></pre> <p>what am I doing wrong? How can implement long pooling, using Tornado and Prototype (or jQuery)</p> <p>PS: I have looked at Chat example, but it too complicated. Can't understand how it works :(</p> <p>PSS Download full <a href="http://www.mediafire.com/?ilgzdzrw24y" rel="noreferrer">example</a></p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload