如何让ZeroMQ使用UDP?

How to make ZeroMQ use UDP?

我似乎无法使用 UDP 或找到任何有关如何在 PyZMQ 中使用它的示例。

我希望能够发送 h264 流。通过在 .

上使用@nathancy answer,我能够使用 TCP 做到这一点

但我似乎无法或找不到任何有关如何在 PyZMQ 中使用 UDP 的示例

使用 UDP 而不是 TCP 发送数据以提高速度需要做什么?

丢帧就丢,我不需要重新发送。这就是为什么我要使用 UDP

Q : What is it that I need to do to send data with UDP instead of TCP...?

A :
好吧,
ZeroMQ 有一种方法可以使用 UDP 传输来实现实用通用多播 (PGM) 协议,无论是ZeroMQ { pgm:// | epgm:// }-传输-类。然而,注意事项适用:

The pgm transport implementation requires access to raw IP sockets. Additional privileges may be required on some operating systems for this operation. Applications not requiring direct interoperability with other PGM implementations are encouraged to use the epgm transport instead which does not require any special privileges.

因此,对于 ZeroMQ 经典 PUB / SUB-数据流,可以这样设置:


//
// 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( aMulticastOverUDP_socket, "epgm://eth0;239.192.1.1:5555" );

assert (rc == 0 && "____ Well, something went wrong on epgm:// connect" );

在 Python 中,听起来可能像:

#----------------------------------------------------- start Context()-engine
aContext = zmq.Context( nIoTHREADs )
#----------------------------------------------------- start Socket()-instances
aUdpPUB  = aContext.socket( zmq.PUB )
#----------------------------------------------------- start settings
aUdpPUB.setsockopt( zmq.LINGER, 0 )
aUdpPUB.setsockopt( zmq....,    ... )
...
#----------------------------------------------------- start serving
aUdpPUB.bind( "epgm://eth0;239.192.1.1:5555" )
...
#----------------------------------------------------- start dismantling
aUdpPUB.close()
aContext.term()

为了微调 E2E 性能,必须调整相关的 Context()-实例' zmq_setsockopt()-参数,以在最大

上压缩传输