了解高级ZeroMQ套接字类型

Tho*_*son 8 zeromq

我已经阅读了0MQ指南,并且我理解了基本的套接字类型:PUSH/ PULL,REQ/ REPPUB/ SUB.

关于ROUTER/ DEALERX--sockets(例如,XSUB/ XPUB,XREQ/ XREP)我很困惑.

这些套接字类型有哪些用例?

use*_*197 16

琐碎的原型

ZeroMQ" 套接字 "听起来像一个面向套接字的设备,但仔细看看这个智能库相当增加了一个正式通信模式(它使用真正的套接字),它具有分层设计,可在内部解决内部弹性缓冲等细节问题. ,内部1:N公平队列 - 发送/轮询,内部ioThread负载平衡,仅举几例.

在这些内部智能子系统上,也就是基本的正式通信模式 - 尽可能接近地命名,类似于人类相似的行为 - (一) - PUB发表+(其他) - SUB订阅 - ZeroMQ 建立一个"地面"更强大的消息传递方案.

作为一个好帮手,而不是说一PUB- 插槽,一个可以选择想象SUB,XPUB或者DEALER是相当的实体-与- " 行为 ",坐在电话线的一端,谁拥有的硬连接的习惯,它可以在通话期间使用.

因此,一些实体可以讲一个到另一个,都PUB可以给一个或多个说话SUB(S) -不知道有多少/如果有的话(是)连接到他的,好了,到任何他的电话线(是的,PUB能有许多传出的电话线 - 加上细节检查可用的ZeroMQ传输类,PUB可以"暴露来电"或以其他方式部署 - (哦,是的,甚至PUB可以"拿起他的一条电话线"和拨号( .connect()朝向一个选定的SUBXSUB对手的!酷...(是的,设计的ZeroMQ功能很多)) - 所有这些并行.

SUB可以自行决定并订阅过滤器,听到什么以及从收到的电话线听不到的内容.当然,其他一些人根本没有在他们的预先布线行为中配备能够普遍地互相打电话并且有意义地进入可行的对话,但是可以与它"友好"(行为兼容)交流对话(a PAIR,作为例如,有一个唯一的机会去和另一个人说话 - 说话PAIR.

为了更深入地了解这些构建块,包括XPUB/ XSUB动机,为什么他们必须扩展普通PUB/ SUB原始,可以推荐的最佳方式是阅读Pieter Hintjens的书"Code Connected,Volume 1"(可下载为pdf).

(恕我直言,这是一本必读的书,不仅仅是关于ZeroMQ本身的智能属性,还有关于心态和其他鼓舞人心的想法的转变).

ROUTER/ DEALER&DEALER/ROUTER

这些形式通信模式在图37中很好地说明,并在所述书中进行了讨论.值得一读,而不仅仅是在这里说几句话.

ROUTERDEALER示例(1对N的用例),其中一次服务器会谈异步多个工人可以打开"倒挂"得到一个非常有用的N对1的架构,其中各种客户交谈,一台服务器,并做这是异步的.因此,您的设计需求可以提供精确的用例.

XPUB/ XSUB用例

一旦获取到" 间介导的ZeroMQ原始元之间的连接的"模式,XPUB/ XSUB代理"设备"用于多一个附加的服务比只是作为一个代理来.bind()&.connect()到.它还通过读取套接字侧"解释"消息内容(通过代理服务器检查传入zmq.SUBSCRIBE-s并将其传送到实时PUB发布方XSUB).这XPUB是主要的用例XSUBXPUB

掌握ZMQ武器库逐个元素本身并不是目标.它是一种乐高风格的构建模块套件,用于设计特定于项目的分布式消息传递模式,可根据更复杂的需求进行协作 - 单节点故障后的自我修复,性能可扩展性,自适应重新配置等等其他.

只有一张图,图60:

在此输入图像描述

复杂系统

典型的现实世界的应用程序去绝不仅仅是更远重新使用基本PAIR/ PAIR,XREQ/ XREP,...元,其中这些适当融入你更高级别的设计需求,并在其顶上的添加行为策略,即在您的全局设计控制下使用这些较低级别的原型.

为了安排代码,值得花时间与书籍,而不是相反.

这将为你节省很多啊哈!片刻之后.