在ZeroMQ中,pub-sub和push-pull模式之间的区别是什么?

69

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

如果忽略push-pull模式中的sink,那么这两个模式有什么区别?消息传输方式是否有差异,如果有,是什么区别?

1个回答

88
区别在于PUB套接字将同一消息发送给所有订阅者,而PUSH则在其所有连接的PULL套接字之间执行轮询
在您的示例中,如果您只从根节点发送单个消息,则所有订阅者都会收到它(除了慢速订阅者等),但只有1个工作进程。
发布/订阅模式用于按主题进行广泛的消息分发。推入/拉取模式实际上是一种流水线机制。你的推送/拉取示例似乎试图做负载平衡,这很好,但由于其他问题,请求/响应可能更适合这种情况。
看起来这里的“问题”在0MQ指南的相同部分中描述:push/pull ventilator example

4
我还想知道在丢失消息方面的区别...即如果服务器PUB或PUSH消息并且客户端[1]失去连接并重新连接,会发生什么情况[2]客户端始终处于连接状态,但客户端正在忙于工作而不在.recv()中。 - Bhuvan
1
SUBPULL套接字有一个共同的特性,即在客户端代码没有进行recv操作时,它们会从可用消息中消耗内容。因此,在您的示例中,client[2]将获取任何情况下的消息,而当client[1]重新连接时,它将开始获取新的消息。重要的是,这两种套接字类型都没有“寻址”到特定的客户端。 - SteveLove
1
你是从哪里获取这些信息的?是通过使用ZeroMQ进行试错,还是找到了一些很酷的资源? - Bhuvan
1
有点两者兼备 :) 这份指南非常出色,值得仔细阅读。 - SteveLove
1
在N到1方案中,即多个发布者(或推送者)发送到单个订阅者(或拉取者),哪种更好呢? - lindhe
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接