2

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

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

这基本正确吗?

我倾向于使用 pub/sub 而不是总线/网格方法的原因是因为(我承认我很可能弄错了)-

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

基本上我有 2 个生产者(主要做发布,但偶尔会收到将附加信息放在正在发布的流上的请求,所以他们确实需要收听)然后大约五个消费者主要从发布者,但确实需要偶尔向生产者发送请求。

是的,我希望 pub 以及订阅的 recv() 是异步的(在我使用它的上下文中不允许阻塞)。

所以这是一个双向发布/订阅架构。我正在寻找实现这一点的最简单方法。(交通很轻)。


当然,UDP 传输对此会很好,但我不会屏住呼吸。

4

2 回答 2

2

简单的 :

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

使用另一个“自下而上”的异步通道,无论是NN_PAIR/NN_PAIR更复杂的可扩展正式通信原型模式,还是符合您的意图和延迟目标NN_PUSH/NN_PULL的相反模式。NN_PUB/NN_SUB

工作进程将.nn_send()在任何一方感到有这种需要时都可以自由使用,而其余的则掌握在“中央”进程的手中。

鉴于缩放比例为 1:5 并且工作流程很轻,正如您之前发布的那样,除了丢失的消息之外,确实没有隐藏的陷阱(同样,在之前的帖子中已经提出了可靠消息传递协议的主要解决方案)。

在“中央”节点上,只有.nn_poll()这些信号通道定期(再次,以非阻塞异步方式)和.nn_recv()数据,以防万一,当这样的通道已经 POSACK'ed 消息已经存在于那里在您的应用程序代码端获取和处理。

这就是你所需要的。

于 2018-06-24T16:12:13.000 回答
0

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

每个端点可以是 push、req、bus 或任何你可以有多个端点(例如 2 个 push,或一个 push 和 req/res) 协议可以是任一方向 Rec 可以是阻塞、异步或基于轮询的。

如果您想了解如何执行此操作,请参阅:

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

于 2018-06-27T17:18:28.463 回答