2013-01-02 160 views
0

用於HTTP持久連接我寫了下面的代碼:龍捲風(蟒蛇):持續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() 

我braodcasting每一個新的連接來時刻。但get()後這個問題,馬上連接關閉。

那麼如何在get()調用後打開連接?

+1

你可能要考慮使用[龍捲風實施Socket.io的(https://開頭github.com/MrJoes/tornadio)如果它不是爲了你的目的矯枉過正。 –

+0

是否意味着龍捲風不支持這種持久連接? – user739711

+0

@TokenMacGuy我在這裏說的是,有沒有辦法保持套接字連接,以便我可以在以後寫。 – user739711

回答

2

有沒有這樣的事情作爲「持久」的http連接。 Connection: keep-alive頭允許客戶端和服務器執行新的http請求/響應週期,而不創建新的基礎tcp連接,以節省一點網絡流量,但這對應用程序不可見;並且通常通過反向代理在服務器端實現。客戶在收到對GET的迴應時將不得不提出新的請求。

如果這不是你想到的,只是你想對請求做出迴應,那麼你可能會尋找tornado.web.asynchronous。不過請注意,大多數瀏覽器內的客戶都不會從中受益。 XHR的譬如不會被解僱,直到響應完成,所以瀏覽器的應用程序將要開始一個新的請求反正

+0

在龍捲風中保存多少時間? –

+0

但是,對於服務器發送的事件,這非常有用,其優點是切實可行的:無需客戶端繼續嘗試重新連接到事件源。所以對於SSE tornado.web.asynchronous可能工作正常。 – Cris