nanomsg(nng)中的多个发布者和订阅者

时间:2018-06-24 15:39:41

标签: nanomsg

一个人如何通过TCP传输设置多个发布者和订阅者。我怀疑您没有自动创建网格/总线。因此,每个发布者都需要一个唯一的IP绑定点,对吗?他们只是让订阅者通过一个套接字连接到每个发布者。

(这在https://www.freelists.org/post/nanomsg/does-nanomsg-support-multi-producer-in-pubsub-mode,10中进行了讨论)

那基本上是正确的吗?

我之所以倾向于通过公共汽车/网状方式访问发布/订阅,是因为(而且我承认我很可能会误会)-

  • 我不需要完全连接的网格
  • 我认为您的基数树过滤在每个节点上都比我想出的要好
  • 我喜欢pub / sub的“自动发现”方面,而不是用于总线传输的网格的手动接线
  • (即自动“从网格进入和退出”)

我基本上有2个生产者(主要进行发布,但是偶尔会收到将其他信息放在正在发布的流上的请求,因此他们确实需要收听) 然后大约有五个消费者,这些消费者主要从发布者那里接收数据流,但是确实需要偶尔向生产者发送请求。

是的,我希望发布以及订阅的recv()是异步的(在我使用此上下文的情况下不允许阻塞)。

这是双向发布/订阅体系结构。我正在寻找实现此目标的最简单方法。 (流量很轻)。


当然可以使用UDP传输,但是我并不屏息。

2 个答案:

答案 0 :(得分:1)

简单:

NN_PUB/NN_SUB 设计用于非阻塞,异步,广播方向。

使用另一个“自下而上”的异步通道,可以是 NN_PAIR/NN_PAIR ,也可以是其他任何更复杂的可扩展形式通信原型模式,例如 NN_PUSH/NN_PULL < / strong>或倒置的NN_PUB/NN_SUB都可以满足您的意图和延迟目标。

只要有人感到有这种需要,而其余的交由“中央”流程处理,则.nn_send()的工作流程将免费使用。

鉴于缩放比例为1:5,并且工作流很轻(如您先前所述),除丢失的消息外,实际上并没有隐藏的陷阱(再次,可靠的消息传递协议的主要解决方案已在2000年提出。较早的帖子)。

在“中心”节点上,您只是定期.nn_poll()(再次以非阻塞异步方式)这些信令通道,.nn_recv()数据只是在这种情况下POSACK发送了一条消息,已经存在该消息中,可以在您的应用程序代码端进行提取和处理。

这就是您所需要的。

答案 1 :(得分:0)

NanoMSG NNG非常对称且正交。我与gdamore进行了几次讨论。

每个端点可以是推送,请求,总线或任何其他形式 您可以有多个端点(例如2个push或push and req / res) 协议可以是任意方向 Rec可以基于阻止,异步或轮询。

如果要查看如何执行此操作,请参阅:

https://github.com/nanomsg/nng/issues/551