多家出版商&;nanomsg中的订户(nng)

多家出版商&;nanomsg中的订户(nng),nanomsg,Nanomsg,如何使用TCP传输设置多个发布服务器和订阅服务器。我怀疑您没有自动创建网格/总线。所以每个发布者都需要一个唯一的IP绑定点,对吗?他们只是让订阅者通过一个套接字连接到每个发布者 (讨论内容如下:) 基本正确吗 我之所以倾向于一家酒吧/酒吧,而不是一家巴士/网店,是因为(我承认我可能错了)—— 我不需要完全连接的网格 我认为你在每个节点上的基树过滤比我想的要好 我喜欢pub/sub的“自动发现”方面,而不是公交车运输网的手动布线 (即自动“进入和退出网格”) 基本上,我有两个制作人(他们主要负

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

(讨论内容如下:)

基本正确吗

我之所以倾向于一家酒吧/酒吧,而不是一家巴士/网店,是因为(我承认我可能错了)——

  • 我不需要完全连接的网格
  • 我认为你在每个节点上的基树过滤比我想的要好
  • 我喜欢pub/sub的“自动发现”方面,而不是公交车运输网的手动布线
  • (即自动“进入和退出网格”)
基本上,我有两个制作人(他们主要负责发布,但偶尔会收到请求,要求在发布的流中添加更多信息,所以他们确实需要倾听) 然后是大约五个消费者,他们主要接收来自出版商的数据流,但确实需要偶尔向生产者发送请求

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

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


当然,UDP传输会很好,但我不会屏息以待。

简单: 按照设计,使用NN_PUB/NN_SUB以实现非阻塞、异步、广播方向

使用另一个“自下而上”的异步通道,可以是
NN\u对/NN\u对
或任何其他更复杂的可扩展正式通信原型模式,如
NN\u推/NN\u拉
或符合您的意图和延迟目标的反向
NN\u发布/NN\u SUB

当任何一个进程感到有这种需要时,工作进程都可以自由地
.nn\u send()
,其余的都在“中心”进程的手中

考虑到缩放比例为1:5且工作流很轻,正如您之前所发布的,除了丢失的消息之外,这方面确实没有隐藏的陷阱(同样,可靠消息传递协议的主要解决方案已在之前的文章中提出)

在“中心”节点上,您只需定期(同样,以非阻塞异步方式)和
.nn\u poll()
这些信令通道,以及
.nn\u recv()
数据,以备在应用程序代码端获取和处理时使用


这就是您所需要的。

NanoMSG NNG非常对称和正交。我和格达莫尔进行了几次讨论

每个端点可以是push、req、bus或其他类型 您可以有多个端点(例如,2个推送,或一个推送和req/res) 协议可以是任意方向 Rec可以是阻塞的、异步的或基于轮询的

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


我认为NNG不喜欢投票:@Dr.YSG NNG warning是NNG特有的东西。从那时起,ZeroMQ和nanomsg中都普遍使用零等待轮询,主要用于开发低延迟代码的用例。如果NNG停止了马丁·萨斯特里克的这一传统,那肯定是个好消息。AFAIK零等待轮询()-s在设计和运行时比无阻塞.recv()-s+异常处理的组合更快、更干净,因为没有要读取的消息。无论如何,核心在于使用反向通道设计,而不是实际的“主循环”-代码,您可以根据自己的偏好选择。@Dr.YSG one可能还注意到,使用
.nn_poll()
完全符合Martin Sustrik设计nanomsg引擎的最佳传统,而NNG的意图是(如链接内容所示)将使用户从使用nanomsg风格的API/代码库转向重新分解代码库,开始使用完全不同的理念,正如Garett D'Amore在重新设计为NNG风格的信令/消息传递时所做的那样(这需要一个人采用新的范式,但要通过另一条寻找NNG最佳实践的学习曲线,需要额外的费用)理解,但您如何看待以下内容中讨论的单一订阅者的多个粉丝发布者:)此外,我认为您可能可以通过NNG_FLAG_NONBLOCK获得轮询的效果,如中所示:但他不会告诉您由于不存在数据而返回的错误代码。