linux编译带pgm的zmq,ZeroMQ接口函数之 :zmq_pgm – ØMQ 使用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 (16 bits) | data |

+------------------+----------------------+

下面的图表进一步说明了在连续的PGM数据报中三个ZMQ实例的布局:

First datagram payload+--------------+-------------+---------------------+

| Frame offset | Frame 1 | Frame 2, part 1 |

| 0x0000 | (Message 1) | (Message 2, part 1) |

+--------------+-------------+---------------------+Second datagram payload+--------------+---------------------+

| Frame offset | Frame 2, part 2 |

| 0xFFFF | (Message 2, part 2) |

+--------------+---------------------+Third datagram payload+--------------+----------------------------+-------------+

| Frame offset | Frame 2, final 8 bytes | Frame 3 |

| 0x0008 | (Message 2, final 8 bytes) | (Message 3) |

+--------------+----------------------------+-------------+

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== 0);//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== 0);

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 , Martin Sustrik  and Martin Lucina .

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

翻译:风波

原文:http://www.cnblogs.com/fengbohello/p/4336261.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值