ZeroMQ API(一) 总序

2018/04/23 21:13
阅读数 21

  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)。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部