代码之家  ›  专栏  ›  技术社区  ›  Dr.YSG

Nanomsg(NNG)中的多个出版商和订户

  •  1
  • Dr.YSG  · 技术社区  · 8 年前

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

    (讨论内容如下: https://www.freelists.org/post/nanomsg/does-nanomsg-support-multi-producer-in-pubsub-mode,10 )

    基本上是正确的吗?

    我倾向于一家酒吧/酒吧,而不是巴士/网格方法,是因为(而且我承认我很可能是错的)——

    • 我不需要完全连接的网格
    • 我认为你在每个节点上的基树过滤比我想的更好。
    • 我喜欢pub/sub的“自动发现”方面,而不是公交运输网的手动布线。
    • (即自动“进出网”)。

    基本上,我有两个制片人(他们主要从事出版工作,但偶尔也会收到请求,要求在正在出版的流中添加额外的信息,所以他们确实需要倾听) 然后大约有五个消费者,他们主要接收来自出版商的数据流,但偶尔也需要向生产者发送请求。

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

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


    当然,一个UDP传输会很好地解决这个问题,但我不能屏住呼吸。

    2 回复  |  直到 8 年前
        1
  •  1
  •   user3666197    8 年前

    容易的:

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

    使用另一个异步通道“自下而上”,无论它是 NN_PAIR/NN_PAIR 或者其他更复杂的可扩展正式通信原型模式,比如 NN_PUSH/NN_PULL 或相反的 nn_-pub/nn_-sub号 这符合您的意图和延迟目标。

    工作进程将自由 .nn_send() 当任何一个人感觉到这样的需要,剩下的就掌握在“中心”过程中。

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

    在“中央”节点上,你只是 .nn_poll() 这些信号通道定期(同样,以非阻塞异步方式)和 .nn_recv() 数据只是在一种情况下,当这样的一个通道把一条消息摆到已经存在的地方,以便在应用程序代码端被获取和处理时。

    这就是你所需要的。

        2
  •  0
  •   Dr.YSG    8 年前

    nanomsg nng是非常对称和正交的。我和格达莫谈了几次。

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

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

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

    推荐文章