zeroMq中pub-sub和push-pull模式的区别

Posted

技术标签:

【中文标题】zeroMq中pub-sub和push-pull模式的区别【英文标题】:difference between pub-sub and push-pull pattern in zeroMq 【发布时间】:2013-07-22 18:33:51 【问题描述】:

这两张图片来自http://zguide.zeromq.org/page:all。

如果我们忽略推挽模式中的水槽,这两种模式有什么区别? 消息的传输方式是否有区别,如果有,有什么区别?

【问题讨论】:

【参考方案1】:

不同之处在于PUB 套接字向所有 订阅者发送相同的消息,而PUSH 在其所有连接的PULL 中执行循环插座。

在您的示例中,如果您只从根发送一条消息,那么所有订阅者都会收到它(除了慢速订阅者等),但只有 1 个工作人员。

发布/订阅模式用于根据主题进行广泛的消息分发。推/拉模式实际上是一种流水线机制。您的推/拉示例似乎正在尝试进行负载平衡,这很好,但由于其他问题, req/rep 可能更适合于此。

看起来这里的“问题”在您获得图像的 0MQ 指南的同一部分中描述:push/pull ventilator example

【讨论】:

我也想知道丢失消息方面的区别......即如果服务器 PUB 或 PUSH 消息和客户端 [1] 丢失连接并重新连接 [2] 客户端连接会发生什么一直,但客户忙于工作,不在 .recv() SUBPULL 套接字具有它们从可用消息中使用的共同属性,即使客户端代码没有执行 recv,所以在您的示例中,客户端 [2]在任何一种情况下都会收到消息,并且客户端 [1] 将在重新连接时开始收到新消息。重要的是,这两种套接字类型都不是针对特定客户端的。 你从哪里得到这些信息....用 zeroMQ 试试看,或者你找到了一些很酷的资源? 两者兼而有之 :) 该指南非常出色,值得详细阅读。 在 N 对 1 方案中,一个比另一个更好,即有多个发布者(或推送者)发送给单个订阅者(或拉取者)?

以上是关于zeroMq中pub-sub和push-pull模式的区别的主要内容,如果未能解决你的问题,请参考以下文章

zmq pub-sub通信之ipc双向主题

zeromq实践

使用 ZeroMQ 实现消息总线

如何在 ZeroMQ 的 REQ-REP 模式中获取请求者的公共 IP?

为啥套接字连接的基本抽象并不常见?

Open-Drain&Push-Pull