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(一) 总序的更多相关文章

  1. 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 * ...

  2. ZeroMQ API(七) 安全

    1.无安全性:zmq_null(7) 1.1 名称 zmq_null - 没有安全性或机密性 1.2 概要 NULL机制由ZMTP 3.0规范定义:http://rfc.zeromq.org/spec ...

  3. ZeroMQ API(五) 传输模式

    1.使用TCP的单播传输:zmq_tcp(7) 1.1 名称 zmq_tcp - 使用TCP的ZMQ单播传输 1.2 概要 TCP是一种无处不在,可靠的单播传输.当通过具有ZMQ的网络连接分布式应用程 ...

  4. ZeroMQ API(四) 套接字

    1.创建一个套接字 1.1 zmq_socket(3) 1.1.1 名称 zmq_socket - 创建ZMQ套接字 1.1.2 概要 void * zmq_socket(void * context ...

  5. 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 描述 ...

  6. ZeroMQ API(八) 异常&属性

    1.错误处理 1.1 zmq_errno() 1.1.1 名称 zmq_errno - 为调用线程检索errno的值 1.1.2 概要 int zmq_errno(void); 1.1.3 描述 zm ...

  7. ZeroMQ API(六) 代理

    1.zmq_proxy(3) 1.1 名称 zmq_proxy - 开始内置ZMQ代理 1.2 概要 int zmq_proxy(const void * frontend,const void * ...

  8. ZeroMQ接口函数之 :zmq - 0MQ 轻量级消息传输内核

    官方网址:http://api.zeromq.org/4-0:zmq zmq(7) 0MQ Manual - 0MQ/3.2.5 Name zmq – ØMQ 轻量级消息传输内核 Synopsis # ...

  9. 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 -  ...

随机推荐

  1. ASP.NET MVC 5.0 参考源码索引

    http://www.projky.com/asp.netmvc/5.0/Microsoft/AspNet/Mvc/Facebook/FacebookAppSettingKeys.cs.htmlhtt ...

  2. contos7忘记root密码怎么办

    首先在这个界面按"e"键 然后呢就会进入到如下图所示的界面,在LANG=zh_CN.UTF8的后面加上 init=/bin/sh, 再按 [ Ctrl + X ] 进入'单用户模式 ...

  3. 二级制包安装Tomcat 与 RPM包安装Tomcat

    1:下载二级制包 wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.0.47/bin/apache-tomcat-8.0.47.tar.g ...

  4. 『编程题全队』Alpha 阶段冲刺博客集合

    『编程题全队』Alpha 阶段冲刺博客集合 »Day1 2018年4月19日 博客连接:『编程题全队』Alpha 阶段冲刺博客Day1 »Day2 2018年4月20日 博客连接:『编程题全队』Alp ...

  5. 通达OA工作流主要表的数据结构

    flow_run_prcs 流程执行明细 字段名称 类型 中文 说明 RUN_ID 数值 流水号(关键字段) 每发起一个工作流,即创建一个全局唯一的流水号 PRCS_ID 数值 执行步骤序号 USER ...

  6. 【SQLSERVER】动态游标的实现

    方法1: CREATE   TABLE   #tabTmp(id   int)    INSERT   #tabTmp   EXECUTE('SELECT   id   FROM   '+@Table ...

  7. httpclient的get和post

    pom.xml <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId&g ...

  8. [转帖]Nginx 的配置文件详解.

    nginx配置文件nginx.conf超详细讲解  https://www.cnblogs.com/liang-wei/p/5849771.html   #nginx进程,一般设置为和cpu核数一样w ...

  9. 【大数据】Azkaban学习笔记

    一 概述 1.1 为什么需要工作流调度系统 1)一个完整的数据分析系统通常都是由大量任务单元组成: shell脚本程序,java程序,mapreduce程序.hive脚本等 2)各任务单元之间存在时间 ...

  10. 利用VRID/VMAC实现更安全的netscaler HA故障切换

    利用VRID/VMAC实现更安全的netscaler HA故障切换 virtual MAC在故障切换(failover)中的作用.    在一个HA模式中,首要节点(primary node)拥有所有 ...