我想实现一个(开源)Web 应用程序,用户通过他的浏览器向 Python Web 应用程序发送某种请求。请求数据用于定义和提交某种繁重的计算工作。计算工作外包给“工人后端”(也是 Python)。在作业处理期间,作业会随着时间的推移经历不同的阶段(理想情况下,从“提交”到中间状态到“完成”)。我想要完成的是实时向用户显示当前的工作状态。这意味着工作人员后端必须将作业状态传回 Web 应用程序。然后,Web 应用程序必须将信息推送到用户的浏览器。我为您带来了一张示意性描述基本思想的图片:
红色圆圈中的数字表示事件的时间顺序。“web app”和“worker backend”仍有待设计。现在,如果您能帮助我做出一些技术决策,我将不胜感激。
我的问题,特别是:
我应该在 Web 应用程序和工作人员后端之间应用哪种消息传递技术? 当工作人员后端发出关于某个工作的信号(某种消息)时,它必须触发 Web 应用程序中的某个事件。因此,我需要某种与最初请求提交作业的客户端相关联的回调。我想我需要一些发布/订阅机制,工作后端发布和网络应用订阅。当 Web 应用程序收到消息时,它会通过向客户端发送状态更新来对其做出反应。我希望工作人员后端具有可扩展性,并且与 Web 应用程序紧密分离。因此,我正在考虑使用 Redis 或 ZeroMQ 来完成这项任务。你怎么看?我的整个方法是不是有点太复杂了?
我应该使用哪种技术将信息推送到浏览器? 只是出于完美主义,我想要实时更新。我不想以高频率轮询。当工作人员后端发出消息时,我希望立即推送到客户端:-)。另外,我不需要最大的浏览器支持。这个项目首先对我来说或多或少是一个技术演示。我应该去 HTML5 服务器发送的事件/websockets 吗?或者你会推荐其他方式吗?
非常感谢您提前提出的建议。