名称
zmq - 0MQ 轻量级消息内核
概要
#include <zmq.h>
cc ['flags'] 'files' -lzmq ['libraries']
描述
0MQ 轻量级消息内核是一个库,它扩展了标准套接字接口,提供了传统上由专门的消息中间件产品提供的功能。0MQ 套接字提供异步消息队列、多种消息模式、消息过滤(订阅)、对多种传输协议的无缝访问等抽象。
本文档概述了 0MQ 的概念,描述了 0MQ 如何抽象标准套接字,并提供了 0MQ 库提供的函数的参考手册。
上下文
0MQ '上下文' 维护套接字列表,并管理异步 I/O 线程和内部查询。
在使用任何 0MQ 库函数之前,您必须创建一个 0MQ '上下文'。当您的应用程序退出时,您必须销毁该 '上下文'。这些函数允许您使用 '上下文':
- 创建一个新的 0MQ 上下文
- 使用上下文属性
- 销毁 0MQ 上下文
线程安全性
0MQ '上下文' 是线程安全的,可以根据需要由任意数量的应用程序线程共享,调用者无需进行任何额外的锁定。
单个 0MQ '套接字' 不是线程安全的,除非在将套接字从一个线程迁移到另一个线程时发出完整的内存屏障。实际上,这意味着应用程序可以在一个线程中使用 zmq_socket() 创建一个套接字,然后作为线程初始化的一部分将其传递给一个新创建的线程,例如通过作为参数传递给 pthread_create() 的结构体。
多个上下文
多个 '上下文' 可以在单个应用程序中并存。因此,应用程序可以直接使用 0MQ,同时也可以使用任何数量的额外库或组件,只要它们遵守上述关于线程安全性的准则,这些库或组件本身也可以使用 0MQ。
消息
0MQ 消息是在应用程序之间或同一应用程序的组件之间传递的离散数据单元。0MQ 消息没有内部结构,从 0MQ 本身来看,它们被认为是*不透明的二进制数据*。
提供了以下函数来处理消息:
- 初始化消息
- 发送和接收消息
- 释放消息
- 访问消息内容
- 使用消息属性
- 消息操作
套接字
0MQ 套接字提供异步*消息队列*的抽象,具体的队列语义取决于所使用的套接字类型。有关提供的套接字类型,请参阅 zmq_socket。
提供了以下函数来处理套接字:
- 创建套接字
- 关闭套接字
- 操作套接字选项
- 建立消息流
- 发送和接收消息
- 监控套接字事件
0MQ 提供了一种机制,允许应用程序在一组包含 0MQ 套接字和标准套接字的集合上进行输入/输出事件的多路复用。此机制类似于标准的 *poll()* 系统调用,并在 zmq_poll 中详细描述。然而,此 API 已被弃用。
有一个新的草案 API,包含多个 zmq_poller_* 函数,该 API 在 zmq_poller 中描述。
传输协议
0MQ 套接字可以使用多种不同的底层传输机制。每种传输机制都适用于特定的目的,并有其自身的优点和缺点。
提供了以下传输机制:
代理
0MQ 提供了 '代理' 来创建扇出(fanout)和扇入(fan-in)拓扑。代理将一个 '前端' 套接字连接到一个 '后端' 套接字,并在两个套接字之间透明地切换所有消息。代理可以选择将所有流量捕获到一个第三套接字。要在应用程序线程中启动代理,请使用 zmq_proxy。
安全性
0MQ 套接字可以选择一种安全机制。双方必须使用相同的安全机制。
为 IPC 和 TCP 连接提供了以下安全机制:
- Null 安全
- 使用用户名和密码的纯文本认证
- 椭圆曲线认证和加密
- 生成装甲文本格式的 CURVE 密钥对
- 从密钥派生 CURVE 公钥
- 将密钥转换为/从装甲文本字符串转换
错误处理
0MQ 库函数使用 POSIX 系统上的标准约定来处理错误。通常,这意味着失败时,0MQ 库函数将返回 NULL 值(如果返回指针)或负值(如果返回整数),并且实际的错误代码将存储在 'errno' 变量中。
在非 POSIX 系统上,一些用户可能在检索 'errno' 变量的正确值时遇到问题。提供了 *zmq_errno()* 函数来帮助解决这些情况;详情请参阅 zmq_errno。
提供了 *zmq_strerror()* 函数来将 0MQ 特定的错误代码转换为错误消息字符串;详情请参阅 zmq_strerror。
工具函数
杂项
提供了以下杂项函数:
- 报告 0MQ 库版本
语言绑定
0MQ 库提供了适合在任何语言程序中调用的接口;本文档记录了这些接口在 C 程序员使用时的方式。目的是使用其他语言的 0MQ 程序员应参考本文档以及其语言绑定的供应商提供的任何文档。
语言绑定(C++、Python、PHP、Ruby、Java 等)由 0MQ 社区成员提供,相关链接可在 0MQ 网站上找到。
作者
本页面由 0MQ 社区编写。要进行修改,请阅读 0MQ 贡献政策,网址:https://zeromq.cn/how-to-contribute/。
资源
将错误报告发送至 0MQ 开发邮件列表:<zeromq-dev@lists.zeromq.org>
许可证
本软件的免费使用根据 Mozilla Public License Version 2.0 (MPL-2.0) 的条款授予。详情请参阅 0MQ 发行版中包含的 LICENSE
文件。