2011-05-05 62 views
1

我正在尝试编写我的第一个龙卷风应用程序。
龙卷风示例示例显示下面的代码但是,一旦“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() 

是什么在我的理解中失踪?

回答

3

如果要保持连接处于打开状态,您可能需要使用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), 
]) 
+0

谢谢。这帮助了很大的时间。我在文档中找到聊天演示,并查看其中的长轮询。 Websockets看起来很棒。 – PlanetUnknown 2011-05-05 21:12:42