4.3.2 连接一个套接字 当使用带inproc传输的zmq_connect()将套接字连接到对等地址时

时间:2022-07-01 01:51:29

标签:

1、使用TCP的单播传输:zmq_tcp(7) 1.1 名称

  zmq_tcp - 使用TCP的ZMQ单播传输

1.2 提要

  TCP是一种无处不在,可靠的单播传输。当通过具有ZMQ的网络连接漫衍式应用措施时,使用TCP传输可能是您的首选。

1.3 解决

  ZMQ端点是一个由transport://后跟一个地点构成的字符串。 transport指定要使用的根本协议。该地点指定要连接的传输特定地点。

  对付TCP传输,传输是tcp,地点部分的含义如下界说。

1.3.1 将本地地点分配给套接字

  当使用带有tcp传输的zmq_bind()将套接字本地地点分配给套接字时,端点将被解释为一个接口,后跟一个冒号和要使用的TCP端标语。

  接口可以由以下任何一种指定:

    通配符*暗示所有可用的接口。

    分配给接口的主要IPv4或IPv6地点,以其数字暗示形式。

    操纵系统界说的非可移植接口名称。

  TCP端标语可以通过以下方法指定:

    一个数值,凡是在POSIX系统上赶过1024。

    通配符*暗示系统分配的姑且端口。

  使用姑且端口时,挪用者应使用ZMQ_LAST_ENDPOINT套接字选项检索实际分配的端口。有关详细信息,请参阅zmq_getsockopt(3)。

1.3.2 从套接字解除通配符地点

  当在zmq_bind()中使用通配符*端点时,挪用者应使用从ZMQ_LAST_ENDPOINT套接字选项中获得的实际endpoind使用zmq_unbind()从套接字解除绑定此端点。

1.3.3 连接一个socket

  当使用带tcp传输的zmq_connect()将套接字连接到对等地点时,端点应被解释为对等地点,后跟冒号和要使用的TCP端标语。您可以选择指定一个source_endpoint作为连接的源地点; tcp:// source_endpoint;‘endpoint‘,详见上面的接口说明。

  对等地点可以由以下任一项指定:

    对等体的DNS名称。

    对等体的IPv4或IPv6地点,以其数字暗示形式。

  注意:有关TCP传输使用的ZeroMQ动静传输协议(ZMTP)的说明可以在:15找到

2、使用PGM的可靠组播传输:zmq_pgm(7) 2.1 名称

  zmq_pgm - 使用PGM的ZMQ可靠多播传输

2.2 提要

  PGM(Pragmatic General Multicast)是IP网络上可靠的数据组播传输协议。

2.3 描述

  ZMQ实现PGM的两种变体,PGM数据报直接在RFC 3208(pgm传输)和“封装PGM”或EPGM界说的IP数据报之上分层,此中PGM数据报封装在UDP数据报内(epgm传输)。

  pgm和epgm传输只能与ZMQ_PUB和ZMQ_SUB套接字类型一起使用。

  别的,PGM套接字默认是速率限制的。有关详细信息,请参阅zmq_setsockopt(3)中记录的ZMQ_RATE和ZMQ_RECOVERY_IVL选项。

  pgm传输实现需要访谒原始IP套接字。在此操纵的某些操纵系统上可能需要特别的权限。鼓励不要求与其他PGM实现直接互操纵的应用措施使用epgm传输,而不需要任何特殊权限。

2.4 解决

  ZMQ端点是一个由transport://后跟一个地点构成的字符串。 transport指定要使用的根本协议。 该地点指定要连接的传输特定地点。

  对付PGM运输,运输是pgm,而对付EPGM协议,,运输是epgm。 地点部分的含义界说如下。

2.5 连接一个socket

  当使用带pgm或epgm传输的zmq_connect()将套接字连接到对等地点时,端点将被解释为一个接口,后跟一个分号,后跟一个多播地点,后跟一个冒号和一个端标语。

  接口可以由以下任何一种指定:

    操纵系统界说的接口名称。

    以数字暗示形式分配给接口的主IPv4地点。

  注:接口名称没有以任何方法标准化,应该被认为是任意的并且取决于平台。 在Win32平台上,不存在短接口名称,因此只有主IPv4地点可用于指定接口。 接口部分可以省略,在这种情况下,将会选择默认的接口部分。多播地点由其数字暗示中的IPv4多播地点指定。

2.5 Wire格局

  持续的PGM数据报被ZMQ解释为单个持续的数据流,此中ZMQ动静不必然与PGM数据报界限对齐,并且单个ZMQ动静可以跨越几个PGM数据报。 这个数据流由zmq_tcp(7)中描述的封装在帧中的ZMQ动静构成。

2.5.1 Pgm数据报有效载荷

  以下ABNF语法暗示由ZMQ使用的单个PGM数据报的有效负载:

  datagram = (offset data)
  offset = 2OCTET
  data = *OCTET

  为了延迟插手消费者能够识别动静界限,每个PGM数据报有效载荷以网络字节挨次中的16位无标记整数开始,指定数据报中第一个动静帧的偏移或者如果数据报包罗值0xFFFF 仅包罗较大动静的中间部分。

  请注意,偏移指定了第一条动静的开始位置,而不是第一条动静部分。 因此,如果在数据包的开头有尾随动静部分,则偏移将忽略它们并指向数据包中的第一个初始动静部分。

  下图说明了单个PGM数据报有效载荷的构造:

  +------------------+----------------------+
  | offset (16 bits) | data |
  +------------------+----------------------+

  下图进一步说明了三个示例ZMQ帧在持续的PGM数据报载荷中的构造: