1、使用TCP的单播传输:zmq_tcp(7)

1.1 名称

  zmq_tcp - 使用TCP的ZMQ单播传输

1.2 概要

  TCP是一种无处不在,可靠的单播传输。当通过具有ZMQ的网络连接分布式应用程序时,使用TCP传输可能是您的首选。

1.3 解决

  ZMQ端点是一个由transport://后跟一个地址组成的字符串。 transport指定要使用的基础协议。该地址指定要连接的传输特定地址。

  对于TCP传输,传输是tcp,地址部分的含义如下定义。

1.3.1 将本地地址分配给套接字

  当使用带有tcp传输的zmq_bind()将套接字本地地址分配给套接字时,端点将被解释为一个接口,后跟一个冒号和要使用的TCP端口号。

  接口可以由以下任何一种指定:

    通配符*表示所有可用的接口。

    分配给接口的主要IPv4或IPv6地址,以其数字表示形式。

    操作系统定义的非可移植接口名称。

  TCP端口号可以通过以下方式指定:

    一个数值,通常在POSIX系统上超过1024。

    通配符*表示系统分配的临时端口。

  使用临时端口时,调用者应使用ZMQ_LAST_ENDPOINT套接字选项检索实际分配的端口。有关详细信息,请参阅zmq_getsockopt(3)。

1.3.2 从套接字解除通配符地址

  当在zmq_bind()中使用通配符*端点时,调用者应使用从ZMQ_LAST_ENDPOINT套接字选项中获得的实际endpoind使用zmq_unbind()从套接字解除绑定此端点。

1.3.3 连接一个socket

  当使用带tcp传输的zmq_connect()将套接字连接到对等地址时,端点应被解释为对等地址,后跟冒号和要使用的TCP端口号。您可以选择指定一个source_endpoint作为连接的源地址; tcp:// source_endpoint;'endpoint',详见上面的接口说明。

  对等地址可以由以下任一项指定:

    对等体的DNS名称。

    对等体的IPv4或IPv6地址,以其数字表示形式。

  注意:有关TCP传输使用的ZeroMQ消息传输协议(ZMTP)的说明可以在http://rfc.zeromq.org/spec:15找到

2、使用PGM的可靠组播传输:zmq_pgm(7)

2.1 名称

  zmq_pgm - 使用PGM的ZMQ可靠多播传输

2.2 概要

  PGM(Pragmatic General Multicast)是IP网络上可靠的数据组播传输协议。

2.3 描述

  ZMQ实现PGM的两种变体,PGM数据报直接在RFC 3208(pgm传输)和“封装PGM”或EPGM定义的IP数据报之上分层,其中PGM数据报封装在UDP数据报内(epgm传输)。

  pgm和epgm传输只能与ZMQ_PUB和ZMQ_SUB套接字类型一起使用。

  此外,PGM套接字默认是速率限制的。有关详细信息,请参阅zmq_setsockopt(3)中记录的ZMQ_RATE和ZMQ_RECOVERY_IVL选项。

  pgm传输实现需要访问原始IP套接字。在此操作的某些操作系统上可能需要额外的权限。鼓励不要求与其他PGM实现直接互操作的应用程序使用epgm传输,而不需要任何特殊权限。

2.4 解决

  ZMQ端点是一个由transport://后跟一个地址组成的字符串。 transport指定要使用的基础协议。 该地址指定要连接的传输特定地址。

  对于PGM运输,运输是pgm,而对于EPGM协议,运输是epgm。 地址部分的含义定义如下。

2.5 连接一个socket

  当使用带pgm或epgm传输的zmq_connect()将套接字连接到对等地址时,端点将被解释为一个接口,后跟一个分号,后跟一个多播地址,后跟一个冒号和一个端口号。

  接口可以由以下任何一种指定:

    操作系统定义的接口名称。

    以数字表示形式分配给接口的主IPv4地址。

  注:接口名称没有以任何方式标准化,应该被认为是任意的并且取决于平台。 在Win32平台上,不存在短接口名称,因此只有主IPv4地址可用于指定接口。 接口部分可以省略,在这种情况下,将会选择默认的接口部分。多播地址由其数字表示中的IPv4多播地址指定。

2.5 Wire格式

  连续的PGM数据报被ZMQ解释为单个连续的数据流,其中ZMQ消息不一定与PGM数据报边界对齐,并且单个ZMQ消息可以跨越几个PGM数据报。 这个数据流由zmq_tcp(7)中描述的封装在帧中的ZMQ消息组成。

2.5.1 Pgm数据报有效载荷

  以下ABNF语法表示由ZMQ使用的单个PGM数据报的有效负载:

  datagram = (offset data)
  offset = 2OCTET
  data = *OCTET

  为了延迟加入消费者能够识别消息边界,每个PGM数据报有效载荷以网络字节顺序中的16位无符号整数开始,指定数据报中第一个消息帧的偏移或者如果数据报包含值0xFFFF 仅包含较大消息的中间部分。

  请注意,偏移指定了第一条消息的开始位置,而不是第一条消息部分。 因此,如果在数据包的开头有尾随消息部分,则偏移将忽略它们并指向数据包中的第一个初始消息部分。

  下图说明了单个PGM数据报有效载荷的布局:

  +------------------+----------------------+
  | offset (16 bits) | data |
  +------------------+----------------------+

  下图进一步说明了三个示例ZMQ帧在连续的PGM数据报载荷中的布局:

  第一个数据报有效载荷
  +--------------+-------------+---------------------+
  | Frame offset | Frame 1 | Frame 2, part 1 |
  | 0x0000 | (Message 1) | (Message 2, part 1) |
  +--------------+-------------+---------------------+

  第二个数据报有效载荷
  +--------------+---------------------+
  | Frame offset | Frame 2, part 2 |
  | 0xFFFF | (Message 2, part 2) |
  +--------------+---------------------+

  第三数据报有效载荷
  +--------------+----------------------------+-------------+
  | Frame offset | Frame 2, final 8 bytes | Frame 3 |
  | 0x0008 | (Message 2, final 8 bytes) | (Message 3) |
  +--------------+----------------------------+-------------+

3、本地进程间通信传输:zmq_ipc(7)

3.1 名称

  zmq_ipc - ZMQ本地进程间通信传输

3.2 概要

  进程间传输使用依赖于系统的IPC机制在本地进程之间传递消息。

  注:进程间传输目前仅在提供UNIX域套接字的操作系统上实现。

3.3 解决

  ZMQ端点是一个由transport://后跟一个地址组成的字符串。 transport指定要使用的基础协议。

  该地址指定要连接的传输特定地址。对于进程间传输,传输是ipc,地址部分的含义在下面定义。

3.3.1 绑定一个套接字

  使用带有ipc传输的zmq_bind()将套接字绑定到本地地址时,端点应被解释为识别要创建的路径名的任意字符串。 路径名在ipc实现使用的操作系统名称空间内必须是唯一的,并且必须满足操作系统对路径名格式和长度的任何限制。

  当地址是*时,zmq_bind()应该生成一个唯一的临时路径名。 调用者应该使用ZMQ_LAST_ENDPOINT套接字选项来检索此路径名。 有关详细信息,请参阅zmq_getsockopt(3)。

    任何现有的绑定到同一端点都应被覆盖。 也就是说,如果第二个进程绑定到已经被进程绑定的端点,则这将成功,第一个进程将失去绑定。 在这种行为中,ipc传输与tcp或inproc传输不一致。

    该进程必须能够写入端点路径名。 当端点以/,例如,ipc:///路径名开始时,这将是绝对路径名。 如果端点指定了一个不存在的目录,绑定将失败。

    仅在Linux上,当端点路径名以@开头时,应使用抽象名称空间。 抽象名称空间独立于文件系统,如果一个进程试图绑定已经被进程绑定的端点,它将会失败。 有关详细信息,请参阅unix(7)。

    IPC路径名的最大大小取决于操作系统。 在Linux上,最多113个字符,包括“ipc://”前缀(真实路径名称为107个字符)。

3.3.2 从套接字解除通配符地址

  当在zmq_bind()中使用通配符*端点时,调用者应使用从ZMQ_LAST_ENDPOINT套接字选项中获得的实际endpoind使用zmq_unbind()从套接字解除绑定此端点。

3.3.3 连接一个套接字

  当使用带有ipc传输的zmq_connect()将套接字连接到对等地址时,端点应被解释为识别要连接的路径名的任意字符串。 路径名必须先在操作系统名称空间内创建,方法是将其分配给带有zmq_bind()的套接字。

4、本地进程内(线程间)通信传输:zmq_inproc(7)

4.1 名称

  zmq_inproc - ZMQ本地进程内(线程间)通信传输

4.2 概要

  进程内传输直接在共享单个ZMQ上下文的线程之间通过内存传递消息。

  注:使用inproc传输传递消息时不涉及I / O线程。 因此,如果您正在使用ZMQ上下文进行进程内消息传递,则只需使用零I / O线程即可初始化上下文。 有关详细信息,请参阅zmq_init(3)。

4.3 解决

  ZMQ端点是一个由transport://后跟一个地址组成的字符串。 transport指定要使用的基础协议。 该地址指定要连接的传输特定地址。

  对于进行中的运输,运输是不合理的,地址部分的含义在下面定义。

4.3.1 将本地地址分配给套接字

  当使用带inproc传输的zmq_bind()将本地地址分配给套接字时,端点应被解释为识别要创建的名称的任意字符串。 该名称在与套接字关联的ZMQ上下文中必须是唯一的,长度最多可达256个字符。 名称的格式没有其他限制。

4.3.2 连接一个套接字

  当使用带inproc传输的zmq_connect()将套接字连接到对等地址时,端点将被解释为识别要连接的名称的任意字符串。 该名称必须先通过将其分配给与所连接的套接字相同的ZMQ上下文中的至少一个套接字来创建。

5、集群IPC协议:zmq_tipc

5.1 名称

  zmq_tipc - 使用TIPC的ZMQ单播传输

5.2 概要

  TIPC是一种采用位置透明寻址方案的集群IPC协议。

5.3 解决

  ZMQ端点是一个由transport://后跟一个地址组成的字符串。 transport指定要使用的基础协议。 该地址指定要连接的传输特定地址。

  对于TIPC运输,运输是tipc,地址部分的含义如下定义。

5.3.1 将端口名称分配给套接字

  使用_zmq_bind()_与'tipc'分配端口名称给套接字时

  运输,'端点'的定义形式如下:
    {type,lower,upper}

    *类型是您的服务的数字(u32)ID。
    * Lower和Upper为您的服务指定一个范围。

    发布具有重叠的较低/较高ID的相同服务的意愿
    导致连接请求以循环方式分配到这些请求上方式。

5.3.2 连接一个套接字

  当使用带tipc传输的zmq_connect()将套接字连接到对等地址时,端点将被解释为服务ID,后跟逗号和实例ID。

  实例ID必须位于发布的端口名称的较低/较高范围内,以使端点有效。

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(一) 总序

    序 zeromq是一个轻量级的消息库.它扩展了标准的套接字接口,其特性与传统的消息中间件不同,zeromq提供异步消息队列.多消息传递模式.消息过滤(订阅).无缝访问多个传输协议等的抽象. 本系列AP ...

  3. Web API <五> 序列化

    在 Asp.Net Web Api 中提供了两种 媒体类型格式化器(mime-type formatter),分别用于支持 JSON 和 XML 数据的格式化处理.默认两种格式化器已集成到了 Asp. ...

  4. Spring Boot 2.x 编写 RESTful API (五) 单元测试

    用Spring Boot编写RESTful API 学习笔记 概念 驱动模块 被测模块 桩模块 替代尚未开发完毕的子模块 替代对环境依赖较大的子模块 (例如数据访问层) 示例 测试 Service @ ...

  5. ZeroMQ API(七) 安全

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

  6. ZeroMQ API(四) 套接字

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

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

  8. 天气预报API(五):城市代码--“新编码”和“旧编码” 对比

    参考一些博客.文章 来查找 测试 接口,后来发现两套城市编码标准,有点想法,故拿来对比分析. 注:新旧编码是个人主观叫法,只是为了方便称呼,可能有不当之处,请留言更正. 暂且称 中国天气网等网站使用的 ...

  9. Selenium2(java)selenium常用API 五

    上传文件   元素标签是input时上传方式 上传是一个input,对于这种元素是input 的标签可以采用元素的sendKeys()方法来直接赋值,upload.html代码: <html&g ...

随机推荐

  1. 关于JoptionPane提示框

    import java.util.*; import javax.swing.JOptionPane; import javax.swing.UIManager; public class Main ...

  2. Internet History, Technology and Security (Week5.1)

    Week5 The Transport layer is built on the Internetwork layer and is what makes our network connectio ...

  3. Scrum Meeting Beta - 10

    Scrum Meeting Beta - 10 NewTeam 2017/12/11 地点:新主楼F座二楼 任务反馈 团队成员 完成任务 计划任务 安万贺 完成了作业详情的本地存储Issue #165 ...

  4. 一键轻松查看apk包名和Main Activity

    环境 Windows系统(我的是Win10 64位) Python3(我的是3.6.1) 已安装Git 安装 pip install git+https://github.com/codeskyblu ...

  5. SQLSERVER 的资源限制

    https://docs.microsoft.com/en-us/sql/sql-server/maximum-capacity-specifications-for-sql-server?view= ...

  6. Centos/Fedora下安装Twisted,failed with error code 1 in /tmp/pip-build-H1bj8E/twisted/解决方法

    Python踩坑之路 pip/easy_install无法安装Twisted或者安装后无法导入Twisted 看到MM网站上很多图,想用Scrapy框架爬点图,遇到各种库的问题,蛋疼. 一直twist ...

  7. 【Java并发编程】之十三:生产者—消费者模型

    生产者消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一存储空间,生产者向空间里生产数据,而消费者取走数据. ​ 这里实现如下情况的生产--消费模型: ​ 生产者不断交替地生产两组 ...

  8. 远程连接工具SSH和linux的连接

    实际开发中,Linux服务器都在其他的地方,我们要通过远程的方式去连接Linux并操作它,Linux远程的操作工具有很多,企业中常用的有Puttty.secureCRT.SSH Secure等.我使用 ...

  9. 015 反射中的 Class.forName() 与 ClassLoader.loadClass() 的区别

    作者:nnngu GitHub:https://github.com/nnngu 博客园:http://www.cnblogs.com/nnngu 简书:https://www.jianshu.com ...

  10. Extend to Palindrome UVA - 11475(补成回文串)

    题意: 就是用最少的字符把原字符串补成回文串 解析: emm/.../网上都是用kmp和后缀数组做的 我没想到这俩的思路...emmm... 想到了exkmp的  就是原串和逆串匹配一下  注意要保证 ...