使用ZeroMQ建立异步点对点通道时遇到问题。
我构建点对点通道的方法是,它生成尽可能多的ZMQ_PAIR
个套接字,直到网络中的对等方数量。由于ZMQ_PAIR
套接字确保了两个对等体之间的独占连接,因此它需要相同数量的对等体。我的第一次尝试是通过下图来实现的,它代表了两个对等体之间的配对连接。
但上述方法的问题在于每个配对套接字都需要一个不同的绑定地址。例如,如果网络中有四个对等体,那么每个对等体应该至少有三个(TCP)地址来绑定其余的对等体,这是非常不现实和低效的。
(我认为同行中只有一个唯一的地址。例如。 tcp://*:5555
)
似乎除了使用包含一些消息代理的不同模式之外别无他法,例如XREQ/XREP
。
(我故意避免使用基于代理的方法,因为我的应用程序会在同行之间大量交换消息,这通常会导致代理进程出现性能瓶颈。)
但我想知道是否有人使用ZMQ_PAIR
套接字来有效地构建点对点通道?或者有没有办法绕过多个 ZMQ_PAIR
套接字绑定的不同主机IP地址?
答案 0 :(得分:0)
鉴于上述叙述,"如何有效......" (其中衡量所需效果的内容和方法的指标可能会在稍后得到进一步澄清),转而成为另一个问题 - " 我们可以重新考虑ZeroMQ信令/消息传递基础设施,以便无需工作使用尽可能多的IP地址:port#-s和tcp://
- 基于传输类的拓扑实际需要吗?"
明确表示限制为每个主机/节点不超过一个IP:PORT#
(因此架构&设备/设备即使不是最昂贵的资源)在这样的前进道路上,我们必须克服许多麻烦。
值得注意的是,任何此类尝试都需要支付额外费用。没有任何魔杖可以绕过"绕过"如上所述的这一主要限制。所以准备好支付费用。
它让我想起了TELCO的一个项目,其中distributed-system以类似的方式运作,具有类似的原始动机。每个节点都有一个ssh/sshd
服务设置,其中本地端口转发功能可以公开一个可公开访问的IP:PORT#access-point,其余部分都已实现"内部"通过ssh-tunnels的所有拓扑链接的网格不仅仅是因为加密服务,而是因为能够将所有本地端口转发保持到特定远程端口的舒适性,这是一种如何设置的方法并在所有服务节点之间运行这种独有的点对点链路,但只有一个公共访问IP:每个节点PORT#。
如果其他方法看起来不可行 (PUB/SUB
在早期ZeroMQ / API版本的情况下被逐出实际流向每个终端节点的流量,其中主题过滤在新的ZeroMQ / API版本的情况下,安全和网络部门都不愿意支持SUB
- 或PUB
侧的集中工作负载和巨大资源需求在发送方处理Topic-filter的地方。压缩,动态网络对等(重新)发现,维护,资源规划,故障恢复,......,是的,不是任何简单的快捷方式似乎在任何地方接近只是抓住和(重新)使用) 上面提到的"石器时代" ssh/sshd
- 使用ZeroMQ进行端口转发,仅针对此类本地端口运行,可能会为您节省时间。
无论如何 - 祝你好运!