tornado(Python):持久的http连接

时间:2013-01-02 12:43:14

标签: python tornado

对于http持久连接,我编写了以下代码:

class LongPolling(tornado.web.RequestHandler):
    waiters = set()
    def get(self):
        LongPolling.waiters.add(self)
        for x in LongPolling.waiters:
            x.write("Broadcast all")
            x.flush()
        return

    def on_close(self):
        logging.warning("Connection closed *********")
        LongPolling.waiters.remove(self)

if __name__ == "__main__":
    application = tornado.web.Application([
        (r"/", LongPolling),
    ])
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

每次新连接到来时我都会进行广播..但问题是,在get()连接关闭后立即出现。

那么如何在get()调用之后让连接打开?

1 个答案:

答案 0 :(得分:2)

没有“持久”的http连接。 Connection: keep-alive标头允许客户端和服务器执行新的http请求/响应周期而不创建新的底层tcp连接,以节省一些网络流量,但这对应用程序是不可见的;并且通常由反向代理在服务器端实现。客户在收到对其GET的回复时,必须提出新请求。

如果这不是您的想法,只是您想要一次回应一些请求,那么您可能正在寻找tornado.web.asynchronous。但请注意,大多数浏览器内客户都不会从中受益;例如,在响应完成之前,不会触发XHR,因此浏览器应用程序必须启动新请求