我的影片所使用的提交任务,一些芹菜工人与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
。在用户不打算返回页面一段时间的情况下(即,直到计算完成后),这是很好的。
然而,在用户提交的计算,离开页面,然后返回计算完成之前,同样引发错误,因为网络已经关闭了套接字和一个新打开的情况下。这可以防止计算完成消息传播到前端。
我的问题是:是否有可能重新连接到同一个网络插座?或者,或者,我怎样才能确保一旦计算完成后返回的消息使其返回到用户的当前页面?