如何使用 ZeroMQ 在特定端口上监听和解析 UDP 数据?

How do I use ZeroMQ to listen to and parse UDP-data on a specific port?

本文关键字:和解 监听 UDP 数据 ZeroMQ 何使用      更新时间:2023-10-16

我正在尝试构建一个 c++ 应用程序,该应用程序必须使用 ZeroMQ 来侦听编码的数据包,这些数据包通过 UDP 以10 [Hz]的速率转发到我的机器上的端口8080

如何设置 zmq 套接字/服务器等,以便我可以接收和解码传入的数据?

我在一台运行 Ubuntu 16.04 的 Linux 机器上

更新 + 答案:如@tadman所述,ZMQ 不侦听通用 UDP 数据包。因此,考虑到我无法修改发送数据包的系统,这对于 ZMQ 来说不是合适的用途。我最终按照建议使用了通用@tadman UDP 端点。

如何使用

ZeroMQ 监听和解析特定端口上的 UDP 数据?

问候迪尔伯恩/UoM,让我们首先揭开问题的神秘面纱,
好吗?

ZeroMQ不是一个自我隔离的工具,它也可以并且确实可以谈论或收听非ZeroMQ套接字。

@tadman是对的,也是错的。

ZeroMQ不侦听UDP数据包。// == True;(截至 2018-Q2,API ~ 4.2.2 )
听 ZeroMQ 数据包。// == False;

由于 ZeroMQ 原生 API ~ 4.+,ZeroMQ 既可以监听非 ZeroMQ 套接字,也可以与非 ZeroMQ 套接字通信,即您的愿望可能会导致 ZeroMQContext()引擎使用普通套接字。

如果刚接触 ZeroMQ 分布式系统的设计生态系统,不妨先简要地解读一下[ZeroMQ 层次结构在不到五秒内]部分中的主要概念差异,以便更好地触及要解决的问题的根源。


ZeroMQ具有udp://<transport-class>
只能用于{ ZMQ_RADIO | ZMQ_DISH }原型

虽然 ZeroMQ具有可用于单播和组播接入点地址的udp://传输类,但尚无法使Context()为非 ZeroMQ 普通套接字对等方实例化此类数据泵。


ZeroMQ可以与非ZeroMQ对等体通信,
但只有tcp://多一点<transport-class>

非 ZeroMQ对等方可以使用 ZeroMQ 实现内部的普通袜子、重新修饰(由于许多架构/API 设计原因)连接到名为ZMQ_STREAM的符合 ZeroMQ 的可扩展形式通信原型。这很酷,并且允许使用同构策略来处理这些类型的通信对等体,但是,如有必要,只需要使用tcp://传输类。


如何?

鉴于数据流的来源在您的控制之下,请尝试使其使用 ZeroMQ 生态系统,因为它可以像任何其他 ZeroMQudp://交叉连接的接入点一样舒适地提供服务。

如果设计或"政治"约束阻止您这样做,则接收方不能直接成为 ZeroMQ,因此请决定制作特定于应用程序的协议网关,将非 ZeroMQ-udp 流量调解到任何形式的 ZeroMQ "消耗品",无论是对普通 tcp 的ZMQ_STREAM:(如果决定对代理进行功能简约的设计,或决定直接为此类代理配备任何其他代理, 更智能的 ZeroMQ 原型,以更高的舒适度与您的主数据收集器/处理器进行通信)。

如果音频是预期的有效负载,并且累积延迟是一个问题,最好还阅读有关主引擎如何轻松调整性能的更多详细信息 - 增加 IO线程数、明智地映射ZMQ_AFFINITYZMQ_PRIORITY设置 - 所有这些都会影响目标延迟 + 吞吐量性能包络。


最后但并非最不重要的一点是10 [Hz]要求

这确实是一个很好的部分,它将测试一个人对异步过程协调的洞察力。ZeroMQ主引擎(Context()-instance)以异步和不协调的方式工作。

这意味着,没有直接的方法可以避免累积的延迟,或者通过设计消息队列缓冲区来检查任何无代理的、每对等体管理的异步,以便在硬实时10 [Hz]探测时">及时"旅行"-"back"。

如果这将在弱/"软"(不是严格的R/T)时间流系统协调中工作(没有控制系统稳定性约束/关键系统/生命支持或类似的系统责任,如硬R/T系统设计确实有),从而容忍一定数量的代码执行相关的抖动RTT-/[传输+(重新)处理]延迟一个智能设计的.poll()基于非阻塞检查和可能的一些快速队列预清空策略可以帮助您进入可接受的快速软 RT 行为,以使10 [Hz]监视器足够强大。

所以,有 ZeroMQ 在你面前真的很酷的日子 - 祝你好运,先生。如果项目计划或截止日期在周一到来,最好阅读Pieter HINTJENS的书">Code Connected,Volume 1",其中对Zen-of-Zero的大多数宝石进行了很好的讨论,并检查了分布式系统设计。