我是 ZeroMQ 的新手(并且通常使用套接字进行编程),但我正在尝试(在 Java 中)在 ZeroMQ 中实现对等模型。我想要的是当一个节点上线时,它会向整个网络广播“我在这里,你可以通过这个地址联系我:...”消息。
我在想,如果网络上出现 2 个或更多节点,它们将能够找到彼此而无需通过已知端点。
有人对我如何实现这一目标有任何想法吗?ZeroMQ 甚至可以做到这一点吗?
你所要求的不能用 zmq 完成。没有任何机制(没有已知和已定义的端点)可以让您“知道”发布者何时上线及其消息已准备好订阅。
话虽如此,使用XPub 和 XSub路由器(需要已知的端点)来设置这种类型的东西是非常简单的。您还可以创建自己的“端点”,所有客户端都使用 REQ/REP 套接字连接到该端点。这将允许您拥有一个中心(本质上是目录服务),然后您可以连接点对点订阅/发布连接(这将使您的网络重复保持在最低水平)。
您可能希望使用 UDP 这样做:
您可能想查看一个 C 示例 https://github.com/stanwu/udp-broadcast
我在 LAN 上的现有系统中使用 UDP。它运作良好。您必须注意的唯一问题是 UDP 数据包不能保证传送。他们实际上会迷路,因此您需要考虑重复广播。您还会收到数据包碎片,因此请确保消息很小,但您只需发送足够的信息即可为 ZMQ、TCP 或RabbitMQ
其他任何东西建立连接。其他潜在问题是防火墙和 VPN。