假设我有 ZMQ_PUSH
套接字,连接到多个对等体,我使用了 zmq_send()
通过这些套接字发送一些东西。
我找了几个小时,在ZMQ文档中找不到我的消息将被发送到哪里。
合理的假设是,它将被发送到所有连接的对等体,但他们说,使用的是round-robin算法,这让我有点困惑。这是否意味着我有多少个连接就应该发送多少次相同的消息?
Q : "哪里
zmq_send()
用多个连接发送?"
它确实会发送消息,这取决于实际使用的Archetype是什么。
PUB/SUB
它将每条消息发送给所有订阅了Topic的对等体(左侧,二进制匹配的有效载荷as-string),而在前v3版本中的一些内部细节实际上是将任何消息物理地移动到所有对等体(那里的 SUB
-侧面 Context()
-实例,有点像ALAP,进行了Topic-filtering),从v3+开始就不是这样了。
PUSH/PULL
并没有这个 "承诺",所以最好试着想象一下 PUSH
-侧的作业队列指挥官,而每个 PULL
-侧的工作者从作业队列中接收(这里以循环方式)下一个任务,就像负载均衡器常见的那样。
每一个内置的原型-----------------------。REQ/REP
, XPUB/XSUB
, DEALER/ROUTER
, PAIR/PAIR
, ... - 有类似制定的 "承诺行为",所以ZeroMQ服务可以在结合这些琐碎的Archetypes的基础上,形成一些更复杂的&结构化的组行为,用于消息信号应用。
Q : "合理的假设是,它将被发送到所有连接的对等体。"
如果是这样的话,就会失去关键的属性。PUSH/PULL
"承诺的行为",这一点与 "承诺的行为 "没有任何区别。PUB/SUB
Archetype(这就更没有意义了,开发两样东西,做的都是一样的事情,不是吗?)
如果你从来没有使用过ZeroMQ,你可以在这里先看一下 "ZeroMQ 原则 不到 五秒" 刨根问底