如何使用ZeroMQ监听和解析特定端口上的UDP数据?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用ZeroMQ监听和解析特定端口上的UDP数据?相关的知识,希望对你有一定的参考价值。
我正在尝试构建一个c ++应用程序,该应用程序必须使用ZeroMQ来监听在我的机器上以8080
的速率通过UDP转发到端口10 [Hz]
的编码数据包。
如何设置zmq套接字/服务器/等..这样我可以接收和解码传入的数据?
我在linux机器上运行Ubuntu 16.04
更新+答案:正如@tadman所述,ZMQ不会监听通用UDP数据包。因此,考虑到我无法修改发送数据包的系统,这对ZMQ来说不合适。我最终使用通用UDP端点作为@tadman推荐。
如何使用ZeroMQ监听和解析特定端口上的UDP数据?
致迪尔伯恩/ UoM的问候, 让我们首先揭开问题的神秘面纱,好吗?
ZeroMQ不是一个自隔离工具,它可以并且确实可以说话或者收听非ZeroMQ套接字。
@tadman在同一时间是对是错。
ZeroMQ不监听UDP数据包。
// == True;
(截至2018年第2季度,API~4.2.2) 它侦听ZeroMQ数据包。// == False;
由于ZeroMQ本机API~4。+,ZeroMQ可以监听和与非ZeroMQ套接字通信,即您的愿望可能导致ZeroMQ Context()
引擎使用普通套接字。
如果对ZeroMQ distributed-system的设计生态系统不熟悉,您可能首先要对[ZeroMQ hierarchy in less than a five seconds]部分中的主要概念差异进行简短的解释,以便更好地触及问题的根源来解决。
ZeroMQ有udp://
<transport-class>
,
只能用于{ ZMQ_RADIO | ZMQ_DISH }
Archetypes
虽然ZeroMQ具有准备用于单播和多播AccessPoint地址的udp://
传输类,但还不可能使Context()
为非ZeroMQ,普通套接字对等实例化此类数据泵。
ZeroMQ可以与非ZeroMQ对等体通信,
但刚刚超过tcp://
<transport-class>
非ZeroMQ对等体可以使用ZeroMQ实现中的普通socked,redressed(由于许多架构/ API设计原因)连接到符合ZeroMQ标准的可扩展形式通信原型(ZMQ_STREAM
)。这很酷并允许使用同类策略来处理这些类型的通信对等,但是,如果有必要,只需要使用tcp://
传输类。
如何 ?
鉴于您的数据流源在您的控制之下,请尝试使用ZeroMQ生态系统,因为它可以像任何其他ZeroMQ udp://
交叉连接的AccessPoint一样舒适地使用。
如果设计或“政治”约束阻止您这样做,接收方不能直接使用ZeroMQ,因此决定制作特定于应用程序的协议网关,将Non-ZeroMQ-udp流量调解为任何形式的ZeroMQ“耗材”,不管它一个ZMQ_STREAM
over plain-tcp :(如果决定对代理进行功能简约设计,或者决定直接装配这样的代理与任何其他更智能的ZeroMQ原型,以便与主数据采集器进行更高级别的舒适沟通/处理器)。
如果音频是预期的有效载荷并且累积延迟是一个问题,最好还阅读有关主引擎如何轻松调整性能的更多细节 - 扩大IOthreads的数量,明智地映射ZMQ_AFFINITY
和ZMQ_PRIORITY
设置 - 所有这些都可以影响目标延迟+吞吐量性能包络。
最后,但并非最不重要的,10 [Hz]
要求
这个确实是一个很好的部分,它将测试一个人对异步流程协调的见解。 ZeroMQ主引擎(Context() - 实例)以异步和不协调的方式工作。
这意味着,没有直接的方法来避免累积的延迟或通过desing消息队列缓冲区检查任何无Broker-per-peer托管的异步,以便“旅行” - “back
” - 及时,在硬实时10 [Hz]
探测。
如果这将在弱/“软”(不是严格的R / T)时间流系统协调中工作(没有控制系统稳定性约束/关键系统/生命支持或类似的系统责任,如硬R / T系统设计确实有,因此容忍一定数量的代码执行相关的抖动RTT
- / [传输+(重新)处理] - 延迟智能设计的基于.poll()
的非阻塞检查,可能一些快速队列预排空策略可以帮助您进入可接受的快速,软RT行为,使10 [Hz]
监视器足够健壮。
所以,ZeroMQ在你面前确实是很酷的日子 - 祝你好运,先生。如果周一没有项目计划或截止日期已经过期,那么最好阅读一本神话般的Pieter HINTJENS的书“Code Connected,Volume 1”,其中大多数关于Zen-of-Zero的宝石都经过充分讨论并检查过distributed-systems设计。
以上是关于如何使用ZeroMQ监听和解析特定端口上的UDP数据?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Java DatagramChannel 监听 UDP 数据报