【发布时间】:2022-02-05 21:59:24
【问题描述】:
我正在构建一个消息代理,它通过 ZeroMQ PUSH/PULL 套接字与客户端进行通信,并且能够将客户端从他们未从服务器端订阅的消息中排除(与 ZeroMQ pub 不同/sub 排除客户端的消息)。
目前,我通过以下方式实现它:
- 服务器:在固定端口上绑定 ZeroMQ PULL 套接字
- 客户端:在随机或固定端口上绑定 ZeroMQ PULL 套接字
- 客户端:连接到服务器的 PULL 套接字并发送包含新客户端地址和端口的握手消息。
- 服务器:接收来自客户端的握手并将 PUSH 套接字连接到客户端的 PULL 服务器。向客户端的套接字发送握手响应。
- 客户端:收到握手。已连接!
现在客户端和服务器可以双向通信,服务器只能向特定的客户端子集发送消息。效果很好! 但是,如果绑定 PULL 套接字的客户端无法在其防火墙中打开端口以便服务器可以连接到它们,则此模型不起作用。如何通过最少的重新架构来解决这个问题(因为当前模型在可以正确配置防火墙的情况下运行良好)
我考虑过以下几点:
- 路由器/经销商模式?我对此一无所知,而且我发现的文档很少。
- 某种transport bridging?链接示例提供了 PUB/SUB 示例。
我希望从比我更了解 ZeroMQ 的人那里得到一些建议。
tl;dr:我实现了一个消息代理,它通过双向推/拉套接字与客户端通信。每个客户端绑定一个 PULL 套接字,服务器保存一个 PUSH 套接字映射,以便它可以寻址特定的订阅者。如何处理阻止客户端端口的防火墙?
【问题讨论】:
标签: sockets networking network-programming zeromq