我的影片所使用的提交任務,一些芹菜工人與RabbitMQ的後端提交長時間運行(〜分)計算龍捲風服務器。所提交的任務產生龍捲風協程一WebSocketHandler
內:龍捲風網絡套接字和長時間運行的任務,芹菜
class MainWSHandler(WebSocketHandler):
def open(self):
logging.info("Connection opened.")
def on_close(self):
logging.info("Connection closed.")
def on_message(self, message):
result = self.submit_task(message)
self.write_message("Calculation has been submitted")
@gen.coroutine
def submit_task(self, params):
result = yield gen.Task(long_calculation.apply_async, args=[params])
self.write_message("Completed calculation")
return result
這種運作良好,如果用戶從來沒有離開頁面與當前打開的網頁插座。如果他們這樣做,並且網絡套接字關閉,則返回的消息self.write_message("Completed calculation")
將失敗,並顯示WebSocketClosedError
。在用戶不打算返回頁面一段時間的情況下(即,直到計算完成後),這是很好的。
然而,在用戶提交的計算,離開頁面,然後返回計算完成之前,同樣引發錯誤,因爲網絡已經關閉了套接字和一個新打開的情況下。這可以防止計算完成消息傳播到前端。
我的問題是:是否有可能重新連接到同一個網絡插座?或者,或者,我怎樣才能確保一旦計算完成後返回的消息使其返回到用戶的當前頁面?