- ZeroMQ 教程
- ZeroMQ - 首页
- ZeroMQ - 概述
- ZeroMQ - 安装
- ZeroMQ - 特性
- ZeroMQ 消息传递
- ZeroMQ - 套接字类型
- ZeroMQ - 通信模式
- ZeroMQ - 传输协议
- ZeroMQ - 消息框架
- 扩展性和性能
- ZeroMQ - 负载均衡
- ZeroMQ - SMP
- ZeroMQ - 多线程
- ZeroMQ - 性能注意事项
- ZeroMQ 有用资源
- ZeroMQ - 有用资源
- ZeroMQ - 讨论
ZeroMQ - 套接字类型
在 ZeroMQ 中,套接字是网络编程的标准 API(应用程序编程接口)。这就是 ZeroMQ 提供熟悉的基于套接字的 API 的原因。ZeroMQ 对开发人员最有趣的特性之一是它使用不同的套接字类型来实现任何消息传递模式。
在讨论套接字类型之前,首先了解消息传递模式的概念非常重要。了解这些模式将有助于清楚地了解 ZeroMQ 中不同套接字的运作方式和使用方法。
消息传递模式
消息传递模式指的是使用 ZeroMQ 套接字在分布式系统不同组件之间交换消息的特定设计和行为。ZeroMQ 提供了几种内置的消息传递模式来满足各种通信需求。
以下是内置的核心消息传递模式:
- 请求-回复消息传递模式
- 发布-订阅(发布-订阅)消息传递模式
- 管道消息传递模式
- 独占对消息传递模式
还有更多 ZeroMQ 模式仍处于草案状态,如下所示:
- 客户端-服务器消息传递模式
- 广播-接收消息传递模式
套接字类型
ZeroMQ 消息库提供了几种套接字类型,这些类型定义了套接字的语义,包括它如何路由消息和队列。以下是消息传递模式和属于这些模式的套接字的列表:
请求-回复模式
- REQ 套接字
- REP 套接字
- DEALER 套接字
- ROUTER 套接字
发布-订阅模式
- PUB 套接字
- SUB 套接字
- XPUB 套接字
- XSUB 套接字
管道模式
- PUSH 套接字
- PULL 套接字
独占对模式
- PAIR 套接字
REQ 套接字
REQ 是 ZeroMQ 消息库的初始套接字类型之一,属于请求-回复模式的同步风格。请求-回复模式专为各种面向服务的架构而设计。
客户端使用 REQ 套接字向服务发送请求并接收回复。此类型的套接字仅允许交替发送和后续接收调用序列。它可以连接到任意数量的 REP 或 Router 套接字类型。
以下是“REQ”套接字特性的摘要
特性 | 描述 |
---|---|
兼容对等套接字 | REQ、DEALER |
方向 | 双向 |
发送/接收模式 | 接收、发送、接收、发送… |
传出路由策略 | 循环轮询 |
传入路由策略 | 最后一个对等节点 |
静默状态下的操作 | 阻塞 |
REP 套接字
REP 套接字由服务用于接收请求并向客户端发送回复。此套接字类型仅允许交替接收和后续发送调用序列。如果原始请求者不再存在,则会静默丢弃回复。
以下是“REP”套接字特性的摘要
特性 | 描述 |
---|---|
兼容对等套接字 | REQ、DEALER |
方向 | 双向 |
发送/接收模式 | 接收、发送、接收、发送… |
传出路由策略 | 循环轮询 |
传入路由策略 | 最后一个对等节点 |
DEALER 套接字
DEALER 套接字类型是一种功能强大且灵活的消息传递模式,用于构建高级通信模式,例如请求-回复、发布-订阅或其他自定义消息传递方案。它使用“循环轮询”算法发送和接收消息。
此套接字充当客户端的异步替换 REQ,这些客户端与 REP 或 ROUTER 服务器通信,并且 DEALER 接收到的消息是从所有连接的对等节点中公平排队的。
以下是“Dealer”套接字特性的摘要
特性 | 描述 |
---|---|
兼容对等套接字 | ROUTER、REP、DEALER |
方向 | 双向 |
发送/接收模式 | 不受限制 |
传出路由策略 | 循环轮询 |
传入路由策略 | 公平排队 |
静默状态下的操作 | 阻塞 |
ROUTER 套接字
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 套接字结合使用,PUSH 套接字将消息发送到一个或多个 PULL 套接字。
以下是“PULL”套接字特性的摘要
特性 | 描述 |
---|---|
兼容对等套接字 | PUSH |
方向 | 单向 |
发送/接收模式 | 仅接收 |
传出路由策略 | 公平排队 |
传入路由策略 | N/A |
静默状态下的操作 | 阻塞 |
PAIR 套接字
PAIR 套接字是一种属于“独占对模式”的套接字类型。它专为简单的一对一通信模式而设计,并允许两个对等节点之间建立直接连接,为它们提供了一种相互发送消息的方式。