我正在尝试设计一个系统来处理大量数据并向客户端发送有关其进度的更新。我想使用 nginx(谢天谢地,它刚刚开始支持 websockets)和 uwsgi 作为 web 服务器,我正在使用 zeromq 通过系统传递消息。理想情况下,该解决方案可以用 Python 编写,但我也对 Nodejs 甚至 Go 解决方案持开放态度。
这是我想要实现的流程:
- 客户访问网站并请求处理大量数据。
- 服务器通过 zeromq 将处理外包给另一个进程/服务器 [worker],并回复客户端请求,说明处理已开始,包括有关如何使用服务器设置 websocket 的信息。
- 客户端建立 websocket 连接并等待更新。
- 处理完成后,工作人员发送“处理完成!” 通过 zeromq 向 websocket 进程发送消息,websocket 进程将消息下推到客户端。
我描述的可能吗?我想我在想我可以在皇帝模式下运行 uwsgi,这样它就可以为 webserver 处理一个进程(端口),为 websocket 进程处理另一个进程(端口)。我只是不确定我是否能找到一种方法来接收 zeromq 消息和管理来自同一进程的 websocket 连接。也许我必须从工作人员那里启动最终的 websocket 推送?
任何帮助/正确的方向指向/潜在的解决方案将不胜感激。任何带有正确路由的 websocket 的 nginx 配置文件的示例或片段也将不胜感激。
谢谢!