1. 程式人生 > >ZeroMQ介面函式之 :zmq_pgm – ØMQ 使用PGM 進行可靠的多路傳輸

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 <[email protected]>, Martin Sustrik <[email protected]> and Martin Lucina <[email protected]>.

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 : [email protected]