【发布时间】:2014-09-08 16:39:57
【问题描述】:
我已阅读 0MQ 指南,并且了解基本的套接字类型:PUSH/PULL、REQ/REP 和 PUB/SUB。
我对@987654327@/DEALER 和X- 套接字(例如,XSUB/XPUB、XREQ/XREP)感到非常困惑。
这些套接字类型的用例是什么?
【问题讨论】:
标签: zeromq
我已阅读 0MQ 指南,并且了解基本的套接字类型:PUSH/PULL、REQ/REP 和 PUB/SUB。
我对@987654327@/DEALER 和X- 套接字(例如,XSUB/XPUB、XREQ/XREP)感到非常困惑。
这些套接字类型的用例是什么?
【问题讨论】:
标签: zeromq
ZeroMQ "sockets" 听起来像一个面向套接字的设备,但是仔细观察这个智能库,它添加了一个正式的通信模式(顺便说一句,它使用true socket ),具有分层设计,可在内部解决内部弹性缓冲、内部 1:N 公平队列发送/轮询、内部 ioThread 负载平衡等细节。 /p>
在这些内部智能子系统之上,也就是基本的正式通信模式——命名尽可能接近类似于人类的行为 -like- (one)-PUB-lishes + (others)-SUB -scribe -- ZeroMQ 构建更强大的消息传递方案的“底层”。
作为一个好帮手,与其说PUB-socket,人们可能会选择将SUB、XPUB 或DEALER 想象成一个实体-with-"行为",坐在电话线的一端,有一些根深蒂固的习惯 em>,它可以在通话过程中使用。
因此,一些实体可以彼此交谈,就像 PUB 可以与一个或多个 SUB(s) 交谈 - 不知道有多少/如果有的话与他的,嗯,连接到 任何他的电话线(是的,PUB 可以有许多拨出电话线——另外,有关详细信息,请检查可用的 ZeroMQ 传输类,PUB 可以“为来电公开”或其他部署--(哦,是的,即使PUB 也可以“拿起他的电话线”并拨打(.connect() 向)选定的SUB 或XSUB 交易对手!酷...(是的,如设计了许多 ZeroMQ 功能))——所有这些都是并行的。
SUB 可以自行决定和订阅过滤器,从传入的电话线听到什么和不听到什么。自然地,其他一些人根本不具备他们预先设定的行为,无法普遍地互相打电话并有意义地进行可行的对话,但可以与它的“友好”(行为兼容)交易对手交谈(PAIR ,例如,有一个也是唯一的机会去打电话 + 与另一个 PAIR-buddy 交谈。
为了更深入地了解这些构建块,包括 XPUB/XSUB 动机,为什么他们必须扩展普通的 PUB/SUB 原语,可以推荐的最佳方法是阅读 @987654321 @。
(恕我直言,一本必读的书,不仅仅是关于 ZeroMQ 本身的智能属性,还关于思维方式的转变和其他鼓舞人心的想法)。
ROUTER/DEALER & DEALER/ROUTER
这些正式的沟通模式在图 37 中得到了很好的说明,并在上述书中进行了讨论。值得一读,而不是仅仅在这里得到几句话。
ROUTER 到 DEALER 的示例(1-to-N 用例)其中一台服务器与多个工作人员异步对话可以“颠倒”以获得非常有用的N-to-1 架构,其中各种客户端与单个服务器通信,并异步执行此操作。因此,您的设计需要给出了确切的用例。
XPUB / XSUB 用例一旦进入 ZeroMQ 原语元素之间的“inter-mediated”连接模式,XPUB/XSUB 代理“设备”提供的附加服务不仅仅是.bind() 和 .connect() 的代理。它还通过读取XPUB 套接字端来“解释”消息内容(检查传入的zmq.SUBSCRIBE-s 并通过代理自己的XSUB 将它们转移到真实的PUB-lisher 端)。这是XSUB 和 XPUB 的主要用例
逐个元素地掌握 ZMQ 武器库本身并不是目标。它更像是一个乐高风格的构建块套件,用于设计特定于项目的分布式消息传递模式,根据更复杂的需求进行协作——单节点故障后的自我修复、性能可扩展性、自适应重新配置和许多其他人。
只有一张图片,图 60:
典型的实际应用程序必须走得更远,而不仅仅是重复使用基本的PAIR/PAIR、XREQ/XREP、...原语,这些原语适合您的更高-级别设计需求,并在其之上添加行为策略,在您的全局设计控制下使用这些较低级别的原型。
为了安排代码,值得先花时间看这本书,反之亦然。
这将为您节省很多啊哈!片刻之后。
【讨论】: