【问题标题】:Keeping the ajax call alive when calling the Tornado server调用 Tornado 服务器时保持 ajax 调用处于活动状态
【发布时间】:2011-05-05 18:48:56
【问题描述】:

我正在尝试编写我的第一个龙卷风应用程序。
tornado 的示例,显示了以下代码,但似乎一旦“MainHandler”函数返回,客户端与此服务器之间的连接将丢失。

我希望服务器在数据可用时持续推送数据。
如何保持管道畅通?

在客户端,我正在考虑进行 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()  

我的理解中缺少什么?

【问题讨论】:

    标签: python comet nonblocking tornado


    【解决方案1】:

    如果您想保持连接打开,您可能需要使用 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),
    ])
    

    【讨论】:

    • 谢谢。这帮了大忙。我在文档中找到了聊天演示,并在其中看到了长轮询。 Websocket 看起来很棒。
    猜你喜欢
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多