我已阅读0MQ指南,并且我了解基本套接字类型:PUSH
/ PULL
,REQ
/ REP
和PUB
/ SUB
。
我对ROUTER
/ DEALER
和X
- 套接字(例如XSUB
/ XPUB
,XREQ
感到非常困惑/ XREP
)。
这些套接字类型有哪些用例?
答案 0 :(得分:15)
ZeroMQ" 套接字 "听起来像一个面向套接字的设备,但仔细看看这个智能库,而不是添加一个正式的通信模式(顺便说一句,使用真正的套接字),它具有分层设计,内部解决内部细节问题弹性缓冲,内部1:N公平队列 - 发送/轮询,内部ioThread负载平衡,仅举几例。
在这些内部智能子系统上,也就是基本形式通信模式 - 尽可能接近地命名,类似于类似于人类的行为 - (一) - PUB
- lishes +(其他) - { {1}} - scribe - ZeroMQ 构建 a"底层"更强大的消息传递方案。
作为好帮手,您可以选择想象SUB
,PUB
或SUB
,而不是说XPUB
- 套接字而是一个实体 - " 行为" ,坐在电话线的一端,谁有一些硬连线 习惯 ,它可以在通话期间使用。
所以,有些实体可以互相说话,类似DEALER
可以与一个或多个PUB
对话 - 而不知道有多少/如果有的话与他有关,好吧,任何他的电话线(是的,SUB
可以有很多外拨电话 - 加上细节检查可用的ZeroMQ传输类,PUB
可以"接听来电"或以其他方式部署 - (哦,是的,即使PUB
可以"拿起他的一条电话线"并拨打(.connect()朝)一个选定的PUB
或SUB
交易对手!酷......(是的,设计的ZeroMQ功能很多)) - 所有这些并行。
XSUB
可以根据自己的判断决定并订阅过滤器,听到什么以及从收到的电话线听不到的内容。当然,其他一些人在他们的预先布线行为中根本没有装备能够普遍地互相打电话并且有意义地进行可行的对话,但是可以与它进行交谈,这是友好的" (行为兼容的)交易对手(作为一个例子,SUB
有一个唯一的机会去和另一个PAIR
- 伙伴交谈。
为了更深入地理解这些构建块,包括PAIR
/ XPUB
动机,为什么他们必须扩展普通XSUB
/ PUB
原语,最好的方法可以推荐的是阅读Pieter Hintjens' book "Code Connected, Volume 1" ( downloadable as pdf)。
(恕我直言,这是一本必读的书,不仅仅是关于ZeroMQ本身的智能属性,还有关于心态和其他鼓舞人心的想法的转变)。
SUB
/ ROUTER
& DEALER
/ DEALER
这些正式的沟通模式在图37中有很好的说明,并在上述书中进行了讨论。值得一读,而不仅仅是在这里说几句话。
ROUTER
到ROUTER
示例(一个 1对N 用例),其中一个服务器与多个工作人员异步对话,可以转为"颠倒& #34;获得一个非常有用的 N-to-1 架构,其中各种客户端与单个服务器通信,并以异步方式执行此操作。因此,确切的用例由您的设计需求给出。
DEALER
/ XPUB
用例进入" 相互调解" ZeroMQ原语元素之间的连接模式,XSUB
/ XPUB
代理"设备"提供一项附加服务,而不仅仅是XSUB
&的代理服务。 .bind()
来。它还"解释"消息内容(通过代理人自己.connect()
向真实 - zmq.SUBSCRIBE
- lisher方面检查传入的PUB
- s& em转移到{{1}这是XSUB
和XPUB
掌握ZMQ武器库元素并不是本身的目标。它是一种乐高风格的构建模块套件,用于设计特定于项目的分布式消息传递模式,可根据更复杂的需求进行协作 - 单节点故障后的自我修复,性能可扩展性,自适应重新配置等等其他
只有一张照片,图60:
典型的真实应用程序必须远远超过重用基本XSUB
/ XPUB
,PAIR
/ PAIR
,...原语,这些适合您的更高级设计需求,并在其上添加行为策略,在您的全局设计控制下使用这些较低级别的原型。
为了安排代码,首先值得花时间阅读本书,反之亦然。
这会为你节省很多啊哈!片刻之后。