2011-06-02 62 views
0

因此,我使用永久幀將Tornado中的數據流式傳輸到JavaScript客戶端應用程序,並且發現JavaScript客戶端偶爾停止接收數據。我已經實現了一種心跳方法,當心跳錯過時,客戶端將更改幀的URL以重新打開連接,但這感覺像是一種尷尬的劈啪聲---並且存在一定量的安裝和拆卸,必須當連接刷新時發生在應用UI中。我真的更喜歡它是否可以成爲整個使用階段的持續連接。如何防止永遠關閉我的連接?

有時候這是每隔幾分鐘一次,其他時候它似乎處於一個循環,每五秒發生一次。我的瀏覽器是Firefox和Chrome。

什麼樣的事情會導致這個問題?我真的只需要一些關於調試起點的想法---我是否應該考慮延遲,數據氾濫,連接不良?問題更可能在Tornado結束還是JavaScript結束?或者,我會更好地投入我的努力,使JavaScript應用程序能夠更優雅地重新初始化自己?

回答

0

啊哈。我明白了這一點。龍捲風does poorly with concurrency。問題在於我的邏輯是從多個線程(由入站RPC觸發)調用長期的RequestHandler實例,當它們發生衝突時,Tornado會嚇壞並關閉連接。

此修復程序是排隊,我與IOLoop線程RequestHandler實例交互,使用add_callback:

tornado.ioloop.IOLoop.instance()add_callback(do_stuff)