如何使用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 的设计生态系统不熟悉,您可能首先要对[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_AFFINITYZMQ_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的宝石都经过充分讨论并检查过设计。

以上是关于如何使用ZeroMQ监听和解析特定端口上的UDP数据?的主要内容,如果未能解决你的问题,请参考以下文章

我用udp发送一个16进制包,接收端怎么解析。

使用 Java DatagramChannel 监听 UDP 数据报

TCP和UDP可以同时监听相同的端口吗

TcpListener:如何监听所有接口上的特定端口?

java中如何检测本机指定的UDP服务端口是不是被占用?并且自动分配一个可用udp端口;

Java TCP 打孔