ZeroMQ API(一) 总序
序
zeromq是一个轻量级的消息库。它扩展了标准的套接字接口,其特性与传统的消息中间件不同,zeromq提供异步消息队列、多消息传递模式、消息过滤(订阅)、无缝访问多个传输协议等的抽象。
本系列API文章基于ZMQ4.1.7编写。
1、上下文
在使用任何ZMQ的库函数之前,必须创建ZMQ上下文,并且,当你退出程序,也必须销毁上下文,和上下文相关的有这些函数:
创建上下文:zmq_ctx_new(3)
获取/设置上下文属性:zmq_ctx_set(3) zmq_ctx_get(3)
销毁上下文:zmq_ctx_shutdown(3) zmq_ctx_term(3)
1.1 线程安全
ØMQ上下文是线程安全的,可以根据需要在尽可能多的应用程序线程之间共享,而不需要调用者需要额外的锁定。
除了在将套接字从一个线程迁移到另一个线程时发出完全内存障碍的情况之外,单个ØMQ套接字不是线程安全的。
实际上,这意味着应用程序可以使用zmq_socket()在一个线程中创建套接字,然后将其作为线程初始化的一部分传递给新创建的线程,例如通过作为pthread_create()的参数传递的结构。
1.2 多个上下文
多个上下文可能共存于一个应用程序中。
因此,应用程序可以直接使用ØMQ,并且同时使用任何数量的附加库或组件,只要遵守上述关于线程安全的准则,它们本身就可以使用ØMQ。
2、消息
ØMQ消息是在同一应用程序的应用程序或组件之间传递的一个独立的数据单元。ØMQ消息没有内部结构,从ØMQ本身来看,它们被认为是不透明的二进制数据。
提供以下功能来处理消息:
初始化消息:zmq_msg_init(3)zmq_msg_init_size(3)zmq_msg_init_data(3)
发送和接收消息:zmq_msg_send(3)zmq_msg_recv(3)
关闭消息:zmq_msg_close(3)
访问消息内容:zmq_msg_data(3)zmq_msg_size(3)zmq_msg_more(3)
使用消息属性:zmq_msg_gets(3)zmq_msg_get(3)zmq_msg_set(3)
消息操作:zmq_msg_copy(3)zmq_msg_move(3)
3、套接字
ØMQ套接字提供异步消息队列的抽象,具体取决于正在使用的套接字类型。 有关所提供的套接字类型,请参阅zmq_socket(3)。
提供以下函数来处理套接字:
创建一个套接字:zmq_socket(3)
关闭一个套接字:zmq_close(3)
操作socket选项:zmq_getsockopt(3)zmq_setsockopt(3)
建立消息流:zmq_bind(3)zmq_connect(3)
发送和接收消息:zmq_msg_send(3)zmq_msg_recv(3)zmq_send(3)zmq_recv(3)zmq_send_const(3)
监视套接字事件:zmq_socket_monitor(3)
3.1、 输入/输出复用
ØMQ为应用程序提供了一种机制,用于将输入/输出事件复用到包含ØMQ套接字和标准套接字的集合中。 该机制镜像标准的poll()系统调用,并在zmq_poll(3)中详细介绍。
4、消息传输
ØMQ套接字可以使用多种不同的底层传输机制。 每种运输机制都适用于特定目的,并具有其自身的优点和缺点。
提供以下传输机制:
使用TCP的单播传输:zmq_tcp(7)
使用PGM的可靠组播传输:zmq_pgm(7)
本地进程间通信传输:zmq_ipc(7)
本地进程内(线程间)通信传输:zmq_inproc(7)
5、代理
ØMQ提供代理来创建扇出和扇入式拓扑。代理将前端套接字连接到后端套接字,并且不透明地切换两个套接字之间的所有消息。 代理可以选择性地捕获所有流量到第三个套接字。 要在应用程序线程中启动代理,请使用zmq_proxy(3)。
6、安全
ØMQ套接字可以选择一种安全机制。 两个同伴必须使用相同的安全机制。
为IPC和TCP连接提供以下安全机制:
无安全性:zmq_null(7)
使用用户名和密码进行纯文本身份验证:zmq_plain(7)
椭圆曲线认证和加密:zmq_curve(7)
以铠装文本格式生成CURVE密钥对:zmq_curve_keypair(3)
将装甲钥匙转换为32字节的二进制密钥:zmq_z85_decode(3)
将32字节二进制CURVE键转换为装甲文本字符串:zmq_z85_encode(3)
7、错误处理
ØMQ库函数使用POSIX系统上的标准约定来处理错误。
通常,这意味着一旦失败,一个ØMQ库函数将返回一个NULL值(如果返回一个指针)或一个负值(如果返回一个整数),并且实际的错误代码应该存储在errno变量中。
提供zmq_errno()函数来协助处理这些情况; 有关详细信息,请参阅zmq_errno(3)。
zmq_strerror()函数用于将ØMQ特定的错误代码转换为错误消息字符串; 有关详细信息,请参阅zmq_strerror(3)。
ZeroMQ API(一) 总序的更多相关文章
- ZeroMQ API(三) 消息
1.初始化消息 1.1 zmq_msg_init(3) 1.1.1 名称 zmq_msg_init - 初始化空的ZMQ消息 1.1.2 概要 int zmq_msg_init(zmq_msg_t * ...
- ZeroMQ API(七) 安全
1.无安全性:zmq_null(7) 1.1 名称 zmq_null - 没有安全性或机密性 1.2 概要 NULL机制由ZMTP 3.0规范定义:http://rfc.zeromq.org/spec ...
- ZeroMQ API(五) 传输模式
1.使用TCP的单播传输:zmq_tcp(7) 1.1 名称 zmq_tcp - 使用TCP的ZMQ单播传输 1.2 概要 TCP是一种无处不在,可靠的单播传输.当通过具有ZMQ的网络连接分布式应用程 ...
- ZeroMQ API(四) 套接字
1.创建一个套接字 1.1 zmq_socket(3) 1.1.1 名称 zmq_socket - 创建ZMQ套接字 1.1.2 概要 void * zmq_socket(void * context ...
- ZeroMQ API(二) 上下文
1.创建上下文 1.1 zmq_ctx_new(3) 1.1.1 名称 zmq_ctx_new - 创建新的ZMQ上下文 1.1.2 概要 void * zmq_ctx_new(); 1.1.3 描述 ...
- ZeroMQ API(八) 异常&属性
1.错误处理 1.1 zmq_errno() 1.1.1 名称 zmq_errno - 为调用线程检索errno的值 1.1.2 概要 int zmq_errno(void); 1.1.3 描述 zm ...
- ZeroMQ API(六) 代理
1.zmq_proxy(3) 1.1 名称 zmq_proxy - 开始内置ZMQ代理 1.2 概要 int zmq_proxy(const void * frontend,const void * ...
- ZeroMQ接口函数之 :zmq - 0MQ 轻量级消息传输内核
官方网址:http://api.zeromq.org/4-0:zmq zmq(7) 0MQ Manual - 0MQ/3.2.5 Name zmq – ØMQ 轻量级消息传输内核 Synopsis # ...
- ZeroMQ接口函数之 :zmq_bind - 绑定一个socket
ZeroMQ 官方地址 : http://api.zeromq.org/4-0:zmq-bind zmq_bind(3) ZMQ Manual - ZMQ/3.2.5 Name zmq_bind - ...
随机推荐
- “吃神么,买神么”的第一个Sprint计划(第五天)
“吃神么,买神么”项目Sprint计划 ——5.25 星期一(第五天)立会内容与进度 摘要:logo2出来了,修改过不一样的风格,组内总体评价可以,但是颜色要改,色调没注意,统一决定改成与背景色一致 ...
- TCP系列52—拥塞控制—15、前向重传与RACK重传拥塞控制处理对比
一.概述 这里主要简单分析一个丢包重传并恢复的场景,通过不同的设置让这个相同的场景分别触发RACK重传和前向重传,通过对比说明以下问题: Forward Retransmit可以产生只有重传标记的数据 ...
- 安装mysql后遇到的一些问题
我们安装好了mysql(cnetos7上是安装mariadb)后,出现如下图所示的问题,我们可以用netstat -lntup查看以下服务器的端口,mysql的端口一般默认为 3306,查看服务是否启 ...
- 蜗牛慢慢爬 LeetCode 5.Longest Palindromic Substring [Difficulty: Medium]
题目 Given a string s, find the longest palindromic substring in s. You may assume that the maximum le ...
- mysql按日期分组统计数据
最近在做一个招聘网时,需要显示一个月内企业招聘信息的发布数量,按日期分组统计,刚开始是直接从源数据库表里面进行group by,但这样子就出现日期不连续的问题了,我想要的效果是,若当天没有数据,则显示 ...
- PHP中的PEAR是什么?
PEAR也就是为PHP扩展与应用库(PHP Extension and Application Repository),它是一个PHP扩展及应用的一个代码仓库. 补充:php中扩展pecl与pear ...
- centos 升级内核(编译安装)
yum install -y wget gcc gc bc gd make perl ncurses-devel xz下载地址:https://www.kernel.org#tar -Jxvf lin ...
- 小试javascript模版mustache
夜以深,人未眠,本该入睡,然逢周末,无聊甚哉,故于此作文打发时间----------- 前几日,无聊,小试了下javascript版本的mustache模版,说是小试,其实主要目的是阅读学习其源码.如 ...
- python自动化之连接数据库
# -*- coding: utf-8 -*- """ Created on Fri Mar 20 10:50:56 2015 @author: sl "&qu ...
- js判断浏览器语言实现网站国际化
一般国际化的网站至少是有中.英文两种语言的,然后就是在不同的语言环境下使用不同的语言页面. 1.实现原理 一般实现这种功能的方法,无非就是两种, 第一种,判断浏览器语言类型: 第二种,判断ip所属国家 ...