假设我有**ZMQ_PUSH**套接字,连接到多个对等方,我使用zmq_send()通过这些套接字发送内容。我现在正在寻找几个小时,我不能在ZMQ文档中找到我的消息将被发送到哪里。合理的假设是,它将被发送到所有连接的对等体,但他们说,循环算法正在使用,这让我有点困惑。这是否意味着我应该发送相同的消息,因为我有连接多次?
ZMQ_PUSH
zmq_send()
dced5bon1#
问:“* zmq_send()使用多个连接发送到哪里?*”
它确实会根据实际使用的原型发送消息。
PUB/SUB将每条消息发送到所有肯定订阅了一个主题的对等体(左侧,有效负载的二进制匹配为字符串),而v3之前版本中的一些内部细节实际上将任何消息物理地移动到所有对等体(在那里,SUB-侧Context()-示例,有点ALAP,执行了主题过滤),自v3+以来就不是这样了。**PUSH/PULL**没有这个“承诺”,所以最好试着把PUSH端想象成一个作业队列指挥器,每个PULL端的工作者从作业队列接收(在这里以循环方式)下一个任务,就像负载平衡器一样。
PUB/SUB
SUB
Context()
PUSH/PULL
PUSH
PULL
每一个其他的内置原型-REQ/REP,XPUB/XSUB,DEALER/ROUTER,PAIR/PAIR,... -都有一个类似的“承诺行为”,所以ZeroMQ服务可以建立在将这些平凡的原型组合成一些更复杂和结构化的组行为的基础上,用于消息/信令应用程序。
REQ/REP
XPUB/XSUB
DEALER/ROUTER
PAIR/PAIR
问:“* 合理的假设是,它将被发送到所有连接的对等方 *”
如果是这样的话,PUSH/PULL“承诺行为”的关键属性就会丢失,这和PUB/SUB原型之间就没有区别了(开发两个做同样事情的东西就更没有意义了,不是吗?)
1条答案
按热度按时间dced5bon1#
问:“*
zmq_send()
使用多个连接发送到哪里?*”它确实会根据实际使用的原型发送消息。
PUB/SUB
将每条消息发送到所有肯定订阅了一个主题的对等体(左侧,有效负载的二进制匹配为字符串),而v3之前版本中的一些内部细节实际上将任何消息物理地移动到所有对等体(在那里,SUB
-侧Context()
-示例,有点ALAP,执行了主题过滤),自v3+以来就不是这样了。**
PUSH/PULL
**没有这个“承诺”,所以最好试着把PUSH
端想象成一个作业队列指挥器,每个PULL
端的工作者从作业队列接收(在这里以循环方式)下一个任务,就像负载平衡器一样。每一个其他的内置原型-
REQ/REP
,XPUB/XSUB
,DEALER/ROUTER
,PAIR/PAIR
,... -都有一个类似的“承诺行为”,所以ZeroMQ服务可以建立在将这些平凡的原型组合成一些更复杂和结构化的组行为的基础上,用于消息/信令应用程序。问:“* 合理的假设是,它将被发送到所有连接的对等方 *”
如果是这样的话,
PUSH/PULL
“承诺行为”的关键属性就会丢失,这和PUB/SUB
原型之间就没有区别了(开发两个做同样事情的东西就更没有意义了,不是吗?)