zmq 套接字-描述

举报
Amrf 发表于 2020/07/27 11:16:05 2020/07/27
【摘要】 请求-回复模式请求-应答模式用于从发送请求的客户端的一个或多个实例中的服务


请求-回复模式

请求-应答模式用于从发送请求的客户端的一个或多个实例中的服务,并接收后续答复每个请求发送。

ZMQ_REQ

客户端使用ZMQ_REQ类型的套接字向服务发送请求并从服务接收答复此套接字类型仅允许zmq_send(request)和后续zmq_recv(reply)调用的交替序列发送的每个请求都在所有服务中轮循,并且收到的每个答复都与最后发出的请求匹配。

ZMQ_REQ套接字由于已达到所有服务的最高水位而进入异常状态时,或者如果根本没有任何服务,则套接字上的任何zmq_send(3)操作均应阻塞,直到异常状态结束或至少一个异常状态为止服务变为可发送;消息不会被丢弃。

ZMQ_REQ特性摘要
兼容的对等套接字 ZMQ_REP
方向 双向的
发送/接收模式 发送,接收,发送,接收...
外发路由策略 轮循
入网路由策略 最后一位
ZMQ_HWM选项操作

ZMQ_REP

服务使用ZMQ_REP类型的套接字来接收来自客户端的请求并向客户端发送回复此套接字类型仅允许zmq_recv(request)和后续zmq_send(reply)调用的交替序列接收到的每个请求都从所有客户端中公平排队,并且发送的每个回复都路由到发出最后一个请求客户端如果原始请求者不再存在,则答复将被静默丢弃。

ZMQ_REP套接字由于达到客户端的高水位线而进入异常状态时,发送给有问题客户端的所有答复都将被丢弃,直到异常状态结束为止。

ZMQ_REP特性摘要
兼容的对等套接字 ZMQ_REQ
方向 双向的
发送/接收模式 接收,发送,接收,发送...
入网路由策略 公平排队
外发路由策略 最后一位
ZMQ_HWM选项操作 下降

ZMQ_DEALER

ZMQ_DEALER类型的套接字是用于扩展请求/应答套接字的高级模式。发送的每个消息都在所有连接的对等方之间进行轮询,并且收到的每个消息都从所有连接的对等方进行公平排队。

以前,此套接字称为ZMQ_XREQ,并且该名称仍可用于向后兼容。

ZMQ_DEALER套接字由于达到所有同位体的最高水位而进入异常状态时,或者如果根本没有任何同位体,则套接字上的任何zmq_send(3)操作都应阻塞,直到异常状态结束或至少一个异常状态为止对等方可以发送;消息不会被丢弃。

当将ZMQ_DEALER套接字连接到ZMQ_REP套接字时,发送的每个消息都必须包含一个空的消息部分,定界符以及一个或多个主体部分

ZMQ_DEALER特性摘要
兼容的对等套接字 ZMQ_ROUTERZMQ_REQZMQ_REP
方向 双向的
发送/接收模式 无限制
外发路由策略 轮循
入网路由策略 公平排队
ZMQ_HWM选项操作

ZMQ_ROUTER

ZMQ_ROUTER类型的套接字是用于扩展请求/应答套接字的高级模式。当收到消息时,ZMQ_ROUTER套接字在将消息传递给应用程序之前,应在消息部分之前包含消息的原始对等方身份接收到的消息在所有连接的同级之间公平排队。发送消息时,ZMQ_ROUTER套接字应删除消息的第一部分,并使用它来确定消息应路由到的对等方的身份如果对等体不再存在,则该消息将被静默丢弃。

以前,此套接字称为ZMQ_XREP,该名称仍可用于向后兼容。

ZMQ_ROUTER套接字由于达到所有对等方的最高水位而进入异常状态时,或者如果根本没有任何对等体,则发送到套接字的任何消息都将被丢弃,直到异常状态结束。同样,任何路由到不存在的对等方或已达到单个高水位标记的对等方的消息也应被丢弃。

ZMQ_REQ套接字连接到ZMQ_ROUTER套接字时,除了源对等方标识之外,每个收到的消息还应包含一个空的定界符消息部分。因此,由应用程序看到的每个接收到的消息的整个结构变为:一个或多个标识部分,定界符部分,一个或多个主体部分将回复发送到ZMQ_REQ套接字时,应用程序必须包括定界符部分。

ZMQ_ROUTER特性摘要
兼容的对等套接字 ZMQ_DEALERZMQ_REQZMQ_REP
方向 双向的
发送/接收模式 无限制
外发路由策略 看到文字
入网路由策略 公平排队
ZMQ_HWM选项操作 下降

发布-订阅模式

发布-订阅模式用于以扇出方式将数据从单个发布一对多分发到多个订阅者

ZMQ_PUB

发布者使用类型为ZMQ_PUB的套接字来分发数据。发送的消息以扇出方式分发给所有连接的对等方。所述zmq_recv(3)函数不是此套接字类型实现。

ZMQ_PUB套接字由于已达到订户的最高水位而进入例外状态时,将发送给有问题订户的任何消息都将被丢弃,直到例外状态结束。对于该套接字类型zmq_send()函数不得阻塞。

ZMQ_PUB特性摘要
兼容的对等套接字 ZMQ_SUB
方向 单向
发送/接收模式 仅发送
入网路由策略 不适用
外发路由策略 扇出
ZMQ_HWM选项操作 下降

ZMQ_SUB

订阅者使用ZMQ_SUB类型的套接字来订阅发布者分发的数据。最初,ZMQ_SUB套接字未订阅任何消息,请使用zmq_setsockopt(3)ZMQ_SUBSCRIBE选项指定要订阅的消息。该zmq_send()函数没有此套接字类型实现。

ZMQ_SUB特性摘要
兼容的对等套接字 ZMQ_PUB
方向 单向
发送/接收模式 仅接收
入网路由策略 公平排队
外发路由策略 不适用
ZMQ_HWM选项操作 下降

流水线模式

流水线模式用于将数据分发到布置在流水线中的节点数据始终沿流水线向下流动,流水线的每一级都连接到至少一个节点当流水线级连接到多个节点时,将在所有连接的节点之间循环数据

ZMQ_PUSH

流水线节点使用ZMQ_PUSH类型的套接字将消息发送到下游流水线节点消息循环到所有连接的下游节点zmq_recv()函数没有此套接字类型实现。

ZMQ_PUSH套接字由于已达到所有下游节点的高水位线而进入异常状态时,或者如果根本没有下游节点,则套接字上的任何zmq_send(3)操作都应阻塞,直到异常状态结束或在异常状态结束时为止。至少一个下游节点可用于发送;消息不会被丢弃。

弃用的别名:ZMQ_DOWNSTREAM

ZMQ_PUSH特性摘要
兼容的对等套接字 ZMQ_PULL
方向 单向
发送/接收模式 仅发送
入网路由策略 不适用
外发路由策略 轮循
ZMQ_HWM选项操作

ZMQ_PULL

流水线节点使用ZMQ_PULL类型的套接字从上游流水线节点接收消息消息从所有连接的上游节点中公平排队zmq_send()函数没有此套接字类型实现。

弃用的别名:ZMQ_UPSTREAM

ZMQ_PULL特性摘要
兼容的对等套接字 ZMQ_PUSH
方向 单向
发送/接收模式 仅接收
入网路由策略 公平排队
外发路由策略 不适用
ZMQ_HWM选项操作 不适用

互斥对模式

互斥对模式用于将一个对等点精确地连接到另一个对等点。此模式用于跨inproc传输的线程间通信。

ZMQ_PAIR

ZMQ_PAIR类型的套接字只能在任何一次连接到单个对等方。对通过ZMQ_PAIR套接字发送的消息不执行消息路由或筛选

ZMQ_PAIR套接字由于已达到所连接对等方的高水位线而进入异常状态时,或者如果未连接任何对等方,则套接字上的任何zmq_send(3)操作都将阻塞,直到对等方可用于发送;消息不会被丢弃。

ZMQ_PAIR套接字设计用于通过zmq_inproc(7)传输进行线程间通信,并且不实现自动重新连接等功能。ZMQ_PAIR套接字被视为实验性的,可能还有其他遗漏或损坏的方面。

ZMQ_PAIR特性摘要
兼容的对等套接字 ZMQ_PAIR
方向 双向的
发送/接收模式 无限制
入网路由策略 不适用
外发路由策略 不适用
ZMQ_HWM选项操作

返回值

如果成功zmq_socket()函数应向新创建的套接字返回一个不透明的句柄。否则,它将返回NULL并将errno设置为以下定义的值之一。

失误

  • 英瓦尔

  • 请求的套接字类型无效。

  • 完美

  • 提供的上下文无效。

  • EMFILE

  • 已达到打开的ØMQ插座总数的限制。

  • 永恒

  • 指定的上下文已终止。


其他:

image.png


【版权声明】本文为华为云社区用户翻译文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容, 举报邮箱:cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。