2011-05-05 113 views
1

我正在嘗試編寫我的第一個龍捲風應用程序。
龍捲風示例示例顯示下面的代碼但是,一旦「MainHandler」函數返回,此服務器的客戶端&之間的連接將會丟失。調用Tornado服務器時保持ajax調用活着

我希望服務器能夠在數據可用時持續推送數據。
如何保持這個管道打開?

在客戶端,我正在考慮做一個ajax調用。這會工作嗎?
我認爲一旦收到數據,ajax通話就結束了。

Facebook並說,客戶保持與服務器開一個線程使用龍捲風,所以我知道這是可以做到的,我想我在這裏的一些簡單的概念掙扎..

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() 

是什麼在我的理解中失蹤?

回答

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), 
]) 
+0

謝謝。這幫助了很大的時間。我在文檔中找到聊天演示,並查看其中的長輪詢。 Websockets看起來很棒。 – PlanetUnknown 2011-05-05 21:12:42