zoukankan      html  css  js  c++  java
  • 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 (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 <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

  • 相关阅读:
    Java静态方法 与 非静态方法(实例方法)的区别
    java实现多态 方法的重写和重载的区别
    Linxu系统dpkg命令
    2016/5/23 阴天
    C#网络应用编程 类,构造函数,方法,属性和字段
    网络应用编程中的 ref
    编程经验(C#)
    Unity常用API备忘录
    Unity快捷键总结
    Unity ScriptObject创建Asset文件
  • 原文地址:https://www.cnblogs.com/fengbohello/p/4336261.html
Copyright © 2011-2022 走看看