Nginx后面的Websockets如何由ZeroMQ触发?

3 投票
1 回答
3038 浏览
提问于 2025-04-17 18:22

我正在设计一个系统,目的是处理大量数据,并向客户端发送关于进度的更新。我想用nginx(幸运的是,它刚开始支持websockets)和uwsgi作为网络服务器,同时通过zeromq来传递消息。理想情况下,我希望这个解决方案能用Python写,但我也愿意考虑Nodejs或者Go的方案。

我想实现的流程是这样的:

  1. 客户端访问一个网站,请求处理大量数据。
  2. 服务器通过zeromq把处理任务分配给另一个进程/服务器(我们称之为工作者),并回复客户端,告诉他们处理已经开始,同时提供如何与服务器建立websocket连接的信息。
  3. 客户端建立websocket连接,并等待更新。
  4. 处理完成后,工作者通过zeromq向websocket进程发送一个“处理完成!”的消息,然后websocket进程把这个消息推送给客户端。

我描述的这个流程可行吗?我在想我可以让uwsgi以皇帝模式运行,这样它就可以处理一个进程(端口)用于web服务器,另一个用于websocket进程。不过,我不太确定是否能在同一个进程中既接收zeromq消息,又管理websocket连接。也许我需要从工作者那里发起最终的websocket推送?

任何帮助、指引或潜在的解决方案都非常感谢。如果能提供一个nginx配置文件的示例,确保websockets正确路由也会很有帮助。

谢谢!

1 个回答

2

当然,这应该是可以做到的。你可以看看这个链接:zerogw

撰写回答