• 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

  • 相关阅读:
    svn环境搭建
    Svn正确的使用方法
    基于phpExcel写的excel类
    关于ecshop中jquery与js冲突解决的方案
    学习Javascript闭包(Closure)
    JS全局变量VAR和THIS
    python六十六课——单元测试(二)
    python六十五课——单元测试(一)
    python六十四课——高阶函数练习题(三)
    python六十四课——高阶函数练习题(二)
  • 原文地址:https://www.cnblogs.com/fengbohello/p/4336261.html
Copyright © 2020-2023  润新知