如何使用ZeroMQ监听和解析特定端口上的UDP数据?
ZeroMQ不是一个自我隔离的工具 的 能够 强> 并且也会说话或收听非ZeroMQ套接字。
@tadman在同一时间是对是错。
的 ZeroMQ 强> 不会收听UDP数据包。 // == True; <子> (截至2018-Q2,API~4.2.2) 子> 它 的 收听ZeroMQ数据包。 强> // == False;
// == True;
// == False;
由于ZeroMQ本机API~4。+,ZeroMQ可以监听和与非ZeroMQ套接字通信,即您的愿望可能导致ZeroMQ Context() - 使用普通插座工作。
Context()
如果是ZeroMQ的新手 分布式系统 的设计生态系统,你可能会喜欢第一个 的 简要 强> dis-ambiguation读入 的 主要概念差异 强> 在里面 [ 的 ZeroMQ层次结构不到五秒钟 强> ]节,以便更好地触及问题的根源来解决。
udp://
<transport-class>
{ ZMQ_RADIO | ZMQ_DISH }
虽然ZeroMQ有 的 udp:// 强> 传输类准备用于单播和多播AccessPoint地址,目前还不可能 Context() 为非ZeroMQ,普通套接字对等体实例化此类数据泵。
tcp://
非ZeroMQ对等体可以使用ZeroMQ实现中的普通socked,redressed(由于许多体系结构/ API设计原因)连接到符合ZeroMQ的可伸缩形式通信原型命名 的 ZMQ_STREAM 强> )。这很酷并且允许使用同类策略来处理这些类型的通信对等体,但是,仅需要使用 的 tcp:// 强> 运输级,如果有必要的话。
ZMQ_STREAM
鉴于您的数据流源在您的控制之下,请尝试使用ZeroMQ生态系统,因为它可以像任何其他ZeroMQ一样舒适地使用 udp:// - 交叉连接的AccessPoint。
如果设计或“政治”约束阻止您这样做,接收方不能直接使用ZeroMQ,因此决定制作特定于应用程序的协议网关,将Non-ZeroMQ-udp流量调解为任何形式的ZeroMQ“耗材”,不管它一个 ZMQ_STREAM over plain-tcp :(如果决定对代理进行功能简约设计,或者决定将这种代理直接配备任何其他更智能的ZeroMQ原型,以便与主数据采集器/处理器进行更高级别的通信) 。
如果音频是预期的有效载荷并且累积延迟是一个问题,最好还要阅读有关主引擎如何轻松调整性能的更多细节 - 扩大IOthread的数量,明智地映射 的 ZMQ_AFFINITY 强> 和 的 ZMQ_PRIORITY 强> 设置 - 所有可能影响目标延迟+吞吐量性能包络的设置。
ZMQ_AFFINITY
ZMQ_PRIORITY
10 [Hz]
这个确实是一个很好的部分,它将测试一个人对异步流程协调的见解。 ZeroMQ主引擎(Context() - 实例)以异步和不协调的方式工作。
这意味着,没有直接的方法来避免累积延迟或通过设计消息队列缓冲区检查任何无Broker,per-peer托管的异步,以便“ 的 旅行 强> “ - ” back “及时,在艰难的实时 的 10 [Hz] 强>探测。
back
如果这将在弱/“软”(不是严格的R / T)时间流系统协调中工作(没有控制系统稳定性约束/关键系统/生命支持或类似的系统责任,如硬R / T系统设计确实有,因此容忍一定数量的与代码执行相关的抖动 RTT - / [传输+(重新)处理] - 智能设计的延迟 的 .poll() 强> 基于非阻塞检查和可能的一些快速排队预排空策略可以帮助您进入可接受的快速,软RT行为,以使 的 10 [Hz] 强> - 监视器足够强大。
RTT
.poll()
所以,ZeroMQ在你面前确实是很酷的日子 - 祝你好运,先生。如果周一尚未推出项目计划或截止日期,那么最好阅读一本神话般的Pieter HINTJENS的书“ 的 代码已连接,第1卷 强> “,大多数宝石的地方 的 禅宗的零 强> 经过充分讨论和检查 分布式系统 设计。