5

我是 ZeroMQ 的新手(并且通常使用套接字进行编程),但我正在尝试(在 Java 中)在 ZeroMQ 中实现对等模型。我想要的是当一个节点上线时,它会向整个网络广播“我在这里,你可以通过这个地址联系我:...”消息。

我在想,如果网络上出现 2 个或更多节点,它们将能够找到彼此而无需通过已知端点。

有人对我如何实现这一目标有任何想法吗?ZeroMQ 甚至可以做到这一点吗?

4

3 回答 3

4

你所要求的不能用 zmq 完成。没有任何机制(没有已知和已定义的端点)可以让您“知道”发布者何时上线及其消息已准备好订阅。

话虽如此,使用XPub 和 XSub路由器(需要已知的端点)来设置这种类型的东西是非常简单的。您还可以创建自己的“端点”,所有客户端都使用 REQ/REP 套接字连接到该端点。这将允许您拥有一个中心(本质上是目录服务),然后您可以连接点对点订阅/发布连接(这将使您的网络重复保持在最低水平)。

于 2012-10-05T13:21:02.067 回答
0

您可能希望使用 UDP 这样做:

  1. 所有节点都为新人监听一个固定的 UDP 端口
  2. 当一个新节点出现时,它会向网络发送一条 UDP 消息(或广播,如果可用),所有其他节点都会收到它,因此知道它的存在
  3. 您现在可以使用固定端点(即 zmq)来进行通信。

您可能想查看一个 C 示例 https://github.com/stanwu/udp-broadcast

  • 如果你有三台 IP 为 192.168.1.10/11/12 的机器
  • 在 192.168.1.10 和 192.168.1.11 上启动 ./udpServer
  • 在 192.168.1.12 上运行 ./udpClient 192.168.1.0 I-AM-HERE-192.168.1.12-PORT-7777
  • 现在 192.168.1.10/11 知道 192.168.1.12 上有一个新人在 7777 上运行一些监听器
于 2013-09-29T18:59:19.587 回答
0

我在 LAN 上的现有系统中使用 UDP。它运作良好。您必须注意的唯一问题是 UDP 数据包不能保证传送。他们实际上会迷路,因此您需要考虑重复广播。您还会收到数据包碎片,因此请确保消息很小,但您只需发送足够的信息即可为 ZMQ、TCP 或RabbitMQ其他任何东西建立连接。其他潜在问题是防火墙和 VPN。

于 2015-06-11T08:41:49.290 回答