调用Tornado服务器时保持ajax调用活着
问题描述:
我正在尝试编写我的第一个龙卷风应用程序。
龙卷风示例示例显示下面的代码但是,一旦“MainHandler”函数返回,此服务器的客户端&之间的连接将会丢失。调用Tornado服务器时保持ajax调用活着
我希望服务器能够在数据可用时持续推送数据。
如何保持这个管道打开?
在客户端,我正在考虑做一个ajax调用。这会工作吗?
我认为一旦收到数据,ajax通话就结束了。
Facebook并说,客户保持与服务器开一个线程使用龙卷风,所以我知道这是可以做到的,我想我在这里的一些简单的概念挣扎..
import tornado.ioloop
import tornado.web
import time
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("What happens after this call ?")
# while(True): time.sleep(5) <push more data># This would be ugly.. plus blocking(correct ?)
application = tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
是什么在我的理解中失踪?
答
如果要保持连接处于打开状态,您可能需要使用websocket。喜欢的东西:
LISTENERS = []
class RealtimeHandler(tornado.websocket.WebSocketHandler):
def open(self):
LISTENERS.append(self)
def on_close(self):
LISTENERS.remove(self)
application = tornado.web.Application([
(r'/', RealtimeHandler),
])
谢谢。这帮助了很大的时间。我在文档中找到聊天演示,并查看其中的长轮询。 Websockets看起来很棒。 – PlanetUnknown 2011-05-05 21:12:42