在调用Tornado服务器时保持AJAX请求活跃
我正在尝试写我的第一个 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()
我理解上缺少了什么呢?
1 个回答
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),
])