zeromq广播到整个网络

时间:2012-09-27 22:01:58

标签: java broadcast zeromq

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

我在想,如果网络中出现2个或更多节点,他们就可以找到对方而无需通过已知端点。

有没有人对如何实现这一点有任何想法? ZeroMQ甚至可以实现这一点吗?

3 个答案:

答案 0 :(得分:4)

使用zmq无法满足您的要求。没有机制(没有已知和定义的端点)允许您“知道”发布者何时联机并且其消息已准备好订阅。

话虽这么说,使用XPub and XSub路由器(需要一个已知的端点)设置这种东西是非常简单的。您还可以使用REQ / REP套接字创建所有客户端连接的自己的“端点”。这将允许您拥有一个中心(实际上是directory service),然后您可以连接点对点订阅/发布连接(这将使您的网络重复保持最低)。

答案 1 :(得分:0)

您可能希望使用UDP执行此操作:

  1. 所有节点都会为新手收听固定的UDP端口
  2. 当一个新节点出现时,它会向网络发送UDP消息(或者如果可用则广播),所有其他节点都知道它的存在
  3. 您现在可以使用固定端点,即zmq来进行通信。
  4. 您可能希望查看https://github.com/stanwu/udp-broadcast

    的C示例
    • 如果您有三台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上运行一些监听器

答案 2 :(得分:0)

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