我正在尝试编写我的第一个 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()
我的理解中缺少什么?
最佳答案
如果您想保持连接打开,您可能需要使用 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),
])
关于python - 调用 Tornado 服务器时保持 ajax 调用处于事件状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5902684/