ZeroMQ接口函数之 :zmq_pgm – ØMQ 使用PGM 进行可靠的多路传输
ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html
—————————————————————————————————————
ZeroMQ 官方地址:http://api.zeromq.org/4-0:zmq-pgm
zmq_pgm(7) ØMQ Manual - ØMQ/3.2.5
Name
zmq_pgm – ØMQ 使用PGM 进行可靠的多路传输
Synopsis
PGM(实际通用多路广播)是一个基于IP网络协议的可靠多路广播。
Description
ZMQ在实现PGM的时候有两种变体,将PGM数据报直接放在IP数据报的上一层的标准协议,在RFC文档3208中定义(pgm传输);和“封装PGM”或叫EPGM,此时PGM数据报被封装在UDP数据报内部(epgm传输方式)。
pgm和epgm传输方式只能被ZMQ_PUB和ZMQ_SUB两种socket使用。
默认情况下,PGM的socket的速率是被限制的。参见zmq_setsockopt(3)函数的ZMQ_RATE和ZMQ_RECOVERY_IVL属性以获取更多细节。
pgm的实现需要访问原始的IP套接字(socket)。附加的功能可能需要访问操作系统的操作。不需要与其它PGM的实现进行互操作性的应用程序可以使用epgm,这样不需要请求任何特权。
Addressing
一个ZMQ的终结点是一个字符串,包括transport ://跟着一个address。transport指明了要使用的底层协议。address指明了传输方式要连接的地址。
对于PGM传输,transport是pgm,对于EPGM协议,transport是epgm。Address的含义在下面定义。
连接一个socket
当使用zmq_connect()函数以pgm或epgm传输方式连接到另一端的的地址是时,终结点(endpoint)应该是一个网口跟一个冒号,再跟一个多播地址,再跟一个冒号,然后是一个端口号。
一个网口可能是下面定义中的一种:
● 由操作系统定义的网口名称
● 分配给这个网口的主IPv4地址,以数字形式表示
网口名不应该以任何形式标准化,而且应该假定是任意的和平台相关的。在Win32平台上没有短网口名,而只有IPv4地址可以用来指定一个网口。网口部分可以省略,此时就会选择默认的网口。
一个多播地址是以IPv4的数字形式表示的。
有线格式(Wire format)
ZMQ会将连续的PGM数据报看做一个单一的连续数据流,ZMQ消息不需要和PGM的数据报进行对齐,而且一个ZMQ消息可能跨越了几个PGM数据报。数据流包括封装在zmq_tcp(7)中定义的消息帧中。
PGM数据报负荷
接下来的ABNF程序代表了一个被ZMQ使用的单一的PGM数据报的负荷:
datagram = (offset data)
offset = 2OCTET
data = *OCTET
为了后来连接进来的客户端区分消息边界,每一个PGM数据报负荷使用一个16bit的网络字节开始,指定数据报中第一个消息帧的开始,或者如果这个数据报包含一个大数数据报中的中间部分,则包含0xFFFF。
注意:offset指明了第一个消息的起始位置,而不是消息的第一帧。所以,如果在数据包开始的时候,传输几个消息帧,offset会被忽略,并且指向包中第一个被初始化的部分。
下面的图表说明了一个单一的PGM数据报负荷的样式:
+------------------+----------------------+
| offset ( bits) | data |
+------------------+----------------------+
下面的图表进一步说明了在连续的PGM数据报中三个ZMQ实例的布局:
First datagram payload
+--------------+-------------+---------------------+
| Frame offset | Frame | Frame , part |
| 0x0000 | (Message ) | (Message , part ) |
+--------------+-------------+---------------------+ Second datagram payload
+--------------+---------------------+
| Frame offset | Frame , part |
| 0xFFFF | (Message , part ) |
+--------------+---------------------+ Third datagram payload +--------------+----------------------------+-------------+
| Frame offset | Frame , final bytes | Frame |
| 0x0008 | (Message , final bytes) | (Message ) |
+--------------+----------------------------+-------------+
Example
连接一个socket
// Connecting to the multicast address 239.192.1.1, port 5555,
// using the first Ethernet network interface on Linux
// and the Encapsulated PGM protocol
rc = zmq_connect(socket, "epgm://eth0;239.192.1.1:5555");
assert (rc == );
// Connecting to the multicast address 239.192.1.1, port 5555,
// using the network interface with the address 192.168.1.1
// and the standard PGM protocol
rc = zmq_connect(socket, "pgm://192.168.1.1;239.192.1.1:5555");
assert (rc == );
See also
zmq_connect(3) zmq_setsockopt(3) zmq_tcp(7) zmq_ipc(7) zmq_inproc(7) zmq(7)
Authors
This ØMQ manual page was written by Pieter Hintjens <ph@imatix.com>, Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>.
Web site design and content is copyright (c) 2007-2012 iMatix Corporation. Contact us for professional support. Site content licensed under the Creative Commons Attribution-Share Alike 3.0 License. ØMQ is copyright (c) Copyright (c) 2007-2012 iMatix Corporation and Contributors. ØMQ is free software licensed under the LGPL. ØMQ, ZeroMQ, and 0MQ are trademarks of iMatix Corporation. Terms of Use — Privacy
Policy
翻译:风波
mail : fengbohello@qq.com
ZeroMQ接口函数之 :zmq_pgm – ØMQ 使用PGM 进行可靠的多路传输的更多相关文章
- 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 - ...
- ZeroMQ接口函数之 :zmq_connect - 由一个socket创建一个对外连接
ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_connect zmq_connect(3) ØMQ Manual - ØMQ/3.2.5 Name zmq_c ...
- ZeroMQ接口函数之 :zmq_tcp – 使用TCP协议的ØMQ网络单播协议
ZeroMQ 官方地址 :http://api.zeromq.org/4-1:zmq-tcp zmq_tcp(7) ØMQ Manual - ØMQ/4.1.0 Name zmq_t ...
- ZeroMQ接口函数之 :zmq_inproc – ØMQ 本地进程内(线程间)传输方式
ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html ——————————————————————————————————— ...
- ZeroMQ接口函数之 :zmq_curve – 安全的认证方式和保密方式
ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_curve zmq_curve(7) ØMQ Manual - ØMQ/4.1.0 Name zmq_curve ...
- ZeroMQ接口函数之 :zmq_proxy – 开始ZMQ内置代理
ZeroMQ 官方地址 :http://api.zeromq.org/4-1:zmq-proxy zmq_proxy(3) ØMQ Manual - ØMQ/4.1.0 Nam ...
- ZeroMQ接口函数之 :zmq_ipc – ZMQ本地进程间通信传输协议
ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html ——————————————————————————————————— ...
- ZeroMQ接口函数之 :zmq_socket – 创建ZMQ套接字
ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html ZeroMQ 官方地址:http://api.zeromq.org/4 ...
随机推荐
- xml格式的数据转化成数组
将得到的xml格式的数据转化成数组 <?php //构造xml $url = "http://api.map.baidu.com/telematics/v3/weather?locat ...
- MySql 里的IFNULL、NULLIF和ISNULL用法区别
mysql中isnull,ifnull,nullif的用法如下: isnull(expr) 的用法:如expr 为null,那么isnull() 的返回值为 1,否则返回值为 0. mysql> ...
- zendstudio快捷键收录
360截屏快捷键:ctrl+shift+x zendstudio:注释代码:ctrl+shift+/ 删除光标所在行:ctrl+D 复制当前行:ctrl+alt+↓ 上下行互换:alt+↑/↓ 代码格 ...
- XMPP作为一个工具的意义
学习XMPP就是拥有位当前应用程序添加实时,推送,社交功能所需的工具.虽然浏览器不支持XMPP通讯,但是我们可以通过BOSH技术解决. 一个XMPP网络包含如下 服务器:为XMPP节提供路由,是否支持 ...
- tyvj1463 智商问题
背景 各种数据结构帝~各种小姊妹帝~各种一遍AC帝~ 来吧! 描述 某个同学又有很多小姊妹了他喜欢聪明的小姊妹 所以经常用神奇的函数来估算小姊妹的智商他得出了自己所有小姊妹的智商小姊妹的智商都是非负整 ...
- [Recommendation System] 推荐系统之协同过滤(CF)算法详解和实现
1 集体智慧和协同过滤 1.1 什么是集体智慧(社会计算)? 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web ...
- 使用Entity Framework通过code first方式创建数据库和数据表
开发环境 WIN10 Entity Framework6.0 MVC5.0 开发工具 VS2015 SqlServer2012 1.创建上下文Context继承DbContext,并创建其他的业 ...
- iOS开发——高级篇——图片轮播及其无限循环效果
平时APP中的广告位.或者滚动的新闻图片等用到的就是图片轮播这种效果,实现方式主要有两种,一种是ScrollView+ImageView,另一种则是通过CollectionView,今天总结的是Scr ...
- mysql 最大连接数 & 连接池
MySQL最大连接数 关于最大连接数:http://mg123.lofter.com/post/1a5f3e_996f838 可以通过修改配置文件(默认/etc/my.cnf)中的"mysq ...
- 探索 OpenStack 之(7):Neutron 深入探索之 Open vSwitch (OVS) + GRE 之 Neutron节点篇
0. 测试环境 硬件环境:还是使用四节点OpenStack部署环境,参见 http://www.cnblogs.com/sammyliu/p/4190843.html OpenStack配置: ten ...