Python 在调用Tornado服务器时保持ajax调用活动

Python 在调用Tornado服务器时保持ajax调用活动,python,comet,nonblocking,tornado,Python,Comet,Nonblocking,Tornado,我正在尝试编写我的第一个tornado应用程序。 tornado的示例显示了下面的代码,但是,似乎一旦“MainHandler”函数返回,客户端与此服务器之间的连接就会丢失。 我希望服务器在数据可用时持续推送数据。 如何保持管道畅通 在客户端,我想做一个ajax调用。这样行吗? 我认为一旦接收到数据,ajax调用就结束了 Facebook确实说,客户端使用tornado与服务器保持线程打开,因此我知道这是可以做到的,我想我正在努力实现一些简单的概念 import tornado.ioloop

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

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

在客户端,我想做一个ajax调用。这样行吗?
我认为一旦接收到数据,ajax调用就结束了

Facebook确实说,客户端使用tornado与服务器保持线程打开,因此我知道这是可以做到的,我想我正在努力实现一些简单的概念

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()  
导入tornado.ioloop
导入tornado.web
导入时间
类MainHandler(tornado.web.RequestHandler):
def get(自我):
self.write(“这次通话后会发生什么?”)
#while(对):时间。睡眠(5)#这会很难看。。加上阻塞(正确吗?)
application=tornado.web.application([
(r“/”,主处理器),
])
如果名称=“\uuuuu main\uuuuuuuu”:
申请。听(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),
])

谢谢。这帮了大忙。我在文档中找到了聊天演示,并在其中看到了长轮询。WebSocket看起来很棒。