2012-09-27 34 views
5

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

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

有没有人有任何想法,我怎么能做到这一点?这是甚至有可能与ZeroMQ?

回答

4

您要求的内容不能用zmq完成。没有一种机制(没有已知和定义的端点)可以让你'知道'发布者何时联机并且其消息可以订阅。这就是说,使用XPub and XSub路由器(它需要一个已知的端点)来设置此类排序是相当简单的。您还可以使用REQ/REP套接字创建所有客户端连接到的自己的“端点”。这将允许你有一个中央(本质上是directory service),然后你可以连接点到点的订阅/发布连接(这将保持你的网络重复最低)。

0

您可能需要使用UDP做这样的:

  1. 所有节点听一个固定的UDP端口新人
  2. 当一个新的节点出现它发送一个UDP消息到网络(或广播,如果可用)和所有其他人得到它,因此知道它的存在
  3. 你现在可以使用固定的终端,即zmq进行沟通。

有你可能想看看https://github.com/stanwu/udp-broadcast

  • 如果你有三台机器与IP 192.168.1.10/11/12
  • 在192.168.1.10和192.168.1.11开始一个C例子./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
0

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