2011-09-02 web tornado long_polling jquery
Пример асинхронного вызова long-polling на сервер tornado.
# coding:utf8
import tornado.httpserver
import tornado.ioloop
import tornado.web
import tornado.autoreload
import time
html = """<html>
<head>
<script type="text/javascript" language="JavaScript"
src="http://code.jquery.com/jquery-1.5.2.min.js"></script>
<script type='text/javascript' language='JavaScript'>
function test(){
$.post('/longPolling',{},function(data){
alert(data);
});
}
</script>
</head>
<body>
<input type="button" value="Test, wait 10 sec" onclick="test();"/>
</body>
</html>"""
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write(html)
class LongHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
def post(self):
self.wait_for_smth(callback=self.async_callback(self.on_finish))
def wait_for_smth(self, callback, t=10):
if t:
tornado.ioloop.IOLoop.instance().add_timeout(time.time() + 1,
lambda: self.wait_for_smth(callback, t-1))
else:
callback()
def on_finish(self):
self.write("Long-Polling OK")
self.finish()
if __name__ == "__main__":
application = tornado.web.Application([
(r"/", MainHandler),
(r"/longPolling", LongHandler)
])
tornado.autoreload.start()
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(8888)
tornado.ioloop.IOLoop.instance().start()