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