ZeroMQ - Socket 套接字类型
在 ZeroMQ 中,Socket 套接字 是用于网络编程的标准 API(应用程序编程接口)。这就是 ZeroMQ 提供熟悉的基于套接字的 API 的原因。对于开发人员来说,ZeroMQ 最有趣的特性之一是它使用不同的套接字类型来实现任何消息传递模式。
在讨论套接字类型之前,首先了解消息传递模式的概念非常重要。了解这些模式将使你清楚地了解不同套接字在 ZeroMQ 中的操作和使用方式。
消息传递模式
消息传递模式是指使用 ZeroMQ 套接字在分布式系统的不同组件之间交换消息的具体设计和行为。 ZeroMQ 提供了几种内置的消息传递模式,可以满足各种通信需求。
以下是内置的核心消息传递模式 −
- 请求-回复消息传递模式
- 发布-订阅 (Publish-subscribe) 消息传递模式
- 管道消息传递模式
- 独占配对消息传递模式
还有更多 ZeroMQ 模式仍处于草稿状态,如下所示 −
- 客户端-服务器消息传递模式
- 无线电天线消息传递模式
套接字类型
ZeroMQ 消息传递库提供了几种套接字类型,用于定义套接字的语义,包括如何路由消息和队列。以下是消息传递模式列表以及属于这些模式的套接字 −
请求-回复模式
- REQ 套接字
- REP 套接字
- Dealer套接字
- 路由器套接字
发布-订阅模式
- PUB 套接字
- SUB 套接字
- XPUB 套接字
- XSUB 套接字
管道模式
- PUSH 套接字
- PULL套接字
独占配对模式
- 配对套接字
REQ 套接字
REQ 是 ZeroMQ 消息传递库的初始套接字类型之一,属于请求-回复模式的同步类型。请求-回复模式专为各种面向服务的架构而设计。
客户端使用 REQ 套接字向服务发送请求并接收来自服务的回复。这种类型的套接字仅允许更改发送和后续接收调用的顺序。它可以连接到任意数量的 REP 或路由器套接字类型。
以下是"REQ"套接字的特征摘要:
特性 | 描述 |
---|---|
兼容对等套接字 | REQ,DEALER |
方向 | 双向 |
发送/接收模式 | 接收,发送,接收,发送... |
传出路由策略 | 公平调度 |
传入路由策略 | 最后一个对等端 |
静音时的操作状态 | 块 |
REP 套接字
REP 套接字由服务用于接收发送回复到客户端的请求。此套接字类型仅允许交替进行接收和后续发送调用。如果原始请求者不再存在,则回复将被默默丢弃。
以下是"REP"套接字的特征摘要:
特征 | 描述 |
---|---|
兼容对等套接字 | REQ,DEALER |
方向 | 双向 |
发送/接收模式 | 接收,发送,接收,发送... |
传出路由策略 | 公平调度 |
传入路由策略 | 最后一个对等点 |
Dealer套接字
DEALER套接字类型是一种强大而灵活的消息传递模式,用于构建高级通信模式,如请求-回复、发布-订阅或其他自定义消息传递方案。它使用"轮询"算法发送和接收消息。
对于与 REP 或 ROUTER 服务器通信的客户端,此套接字可作为 REQ 的异步替代品,并且 DEALER 收到的消息会从所有连接的对等点公平排队。
以下是"Dealer"套接字特征的摘要:
特性 | 描述 |
---|---|
兼容对等套接字 | ROUTER、REP、DEALER |
方向 | 双向 |
发送/接收模式 | 不受限制 |
传出路由策略 | 循环 |
传入路由策略 | 公平排队 |
静音时的操作状态 | 块 |
路由器套接字
ROUTER 套接字是用于高级消息路由模式的套接字类型之一。它允许您将消息发送到特定客户端,从而实现复杂的路由逻辑。ROUTER 作为 REP 的异步替代品,通常用作与 DEALER 客户端通信的服务器的基础。
它可以使用地址(通常是身份字符串)将消息发送到特定对等点。
此套接字支持消息框架,这意味着它可以处理多部分消息。通过 ROUTER 套接字发送的每条消息都可以由多个部分组成,其中第一部分通常用作路由地址,后面的部分包含实际数据。
以下是"Dealer"套接字的特征摘要:
特性 | 描述 |
---|---|
兼容的对等套接字 | DEALER、REQ、ROUTER |
方向 | 双向 |
发送/接收模式 | 不受限制 |
传出路由策略 | 见正文 |
传入路由策略 | 公平排队 |
静音状态下的操作 | 丢弃(见正文) |
PUB 套接字
PUB(发布)是发布者用于分发数据的核心套接字类型之一,指的是实现发布-订阅消息模式。它旨在向多个订阅者发送消息。此套接字类型无法从服务器接收任何消息。
以下是"PUB"套接字的特征摘要:
特性 | 描述 |
---|---|
兼容对等套接字 | SUB、XSUB |
方向 | 单向 |
发送/接收模式 | 仅发送 |
传出路由策略 | N/A |
传入路由策略 | 扇出 |
静音状态下的操作 | 丢弃 |
SUB套接字
SUB(订阅)是订阅者用来订阅发布者分发的数据的套接字类型之一。最初,SUB 套接字未订阅任何消息。
以下是"SUB"套接字的特征摘要:
特征 | 描述 |
---|---|
兼容对等套接字 | PUB、XPUB |
方向 | 单向 |
发送/接收模式 | 仅接收 |
传出路由策略 | 公平排队 |
传入路由策略 | N/A |
XPUB 套接字
XPUB(扩展发布)套接字是发布-订阅消息模式中使用的 PUB(发布)套接字的高级版本。与标准 PUB 套接字相比,XPUB 套接字提供了更多功能。
与 PUB 相同,不同之处在于您可以以传入消息的形式从对等方接收订阅。订阅消息是字节 1(用于订阅)或字节 0(用于取消订阅),后跟订阅主体。
以下是"XPUB"套接字的特征摘要:
特性 | 描述 |
---|---|
兼容对等套接字 | ZMQ_SUB、ZMQ_XSUB |
方向 | 单向 |
发送/接收模式 | 发送消息,接收订阅 |
传出路由策略 | N/A |
传入路由策略 | 扇出 |
静音时的操作状态 | 删除 |
XSUB 套接字
XSUB(扩展订阅)套接字是发布-订阅消息模式中使用的 SUB(订阅)套接字的高级版本。与标准 SUB 套接字相比,XSUB 套接字提供了更多功能。
与 SUB 相同,不同之处在于您通过向套接字发送订阅消息来进行订阅。订阅消息是字节 1(用于订阅)或字节 0(用于非订阅),后面跟着订阅主体。
以下是"XSUB"套接字的特征摘要:
特征 | 描述 |
---|---|
兼容对等套接字 | ZMQ_PUB、ZMQ_XPUB |
方向 | 单向 |
发送/接收模式 | 接收消息,发送订阅 |
传出路由策略 | 公平排队 |
传入路由策略 | N/A |
静音状态下的操作 | 丢弃 |
PUSH 套接字
PUSH 套接字是一种套接字,旨在使用"循环"算法以简单且可扩展的方式向一个或多个 PULL 套接字发送消息。每个连接的 PULL 套接字都以循环技术从 PUSH 套接字接收消息,确保多个接收器之间的工作负载平衡。
以下是"PUSH"套接字的特征摘要:
特性 | 描述 |
---|---|
兼容对等套接字 | PULL |
方向 | 单向 |
发送/接收模式 | 仅发送 |
传出路由策略 | N/A |
传入路由策略 | 循环 |
静音状态下的操作 | 阻止 |
PULL套接字
PULL 套接字是一种套接字,旨在使用"公平排队"算法以简单且可扩展的方式接收消息。它通常与 PUSH 套接字一起使用,后者将消息发送到一个或多个 PULL 套接字。
以下是"PULL"套接字的特征摘要:
特征 | 描述 |
---|---|
兼容对等套接字 | PUSH |
方向 | 单向 |
发送/接收模式 | 仅接收 |
传出路由策略 | 公平排队 |
传入路由策略 | N/A |
静音状态下的操作 | 阻止 |
PAIR 套接字
PAIR 套接字是一种属于"独占配对模式"的套接字。它专为简单的一对一通信模式而设计,允许两个对等体之间直接连接,为他们提供来回发送消息的方式。