Как использовать ZeroMQ для прослушивания и анализа UDP-данных на конкретном порту? - PullRequest
0 голосов
/ 25 мая 2018

Я пытаюсь создать приложение c ++, которое должно использовать ZeroMQ для прослушивания закодированных пакетов, пересылаемых на порт 8080 через UDP на моем компьютере со скоростью 10 [Hz].

Как настроить сокет / сервер zmq / сервер и т. Д. Таким образом, чтобы я мог получать и декодировать входящие данные?

Я на машине с Linux, работающей под управлением Ubuntu 16.04

ОБНОВЛЕНИЕ + ОТВЕТ: ZMQ не прослушивает универсальные пакеты UDP, как указано @tadman.Поэтому, учитывая, что я не смог изменить систему, которая отправляла пакеты, это не было бы подходящим использованием для ZMQ.В итоге я использовал универсальную конечную точку UDP, как рекомендовано @tadman.

1 Ответ

0 голосов
/ 26 мая 2018

Как использовать ZeroMQ для прослушивания и анализа UDP-данных на конкретном порту?

Привет Дирборну / UoM,
Давайте сначаларазоблачить проблему, хорошо?

ZeroMQ не является самоизолирующим инструментом, он может и также говорит или слушает сокеты, отличные от ZeroMQ.

@ tadman былправильно и неправильно одновременно.

ZeroMQ не прослушивает пакеты UDP.// == True; (по состоянию на 2018-Q2, API ~ 4.2.2)
Он прослушивает пакеты ZeroMQ. // == False;

Поскольку собственный API ZeroMQ ~ 4. +, ZeroMQ может и слушать, и разговаривать с сокетами, отличными от ZeroMQ, т. Е. Ваше желание может привести к работе ZeroMQ Context() с простым сокетом.

Если новичок вZeroMQ , разработанные для экосистемы, вы можете сначала краткое дисбигумацию прочитать в основные концептуальные различия в [ Иерархия ZeroMQ менее чем за пять секунд ] Раздел, чтобы лучше понять корни решаемой проблемы.


ZeroMQ имеет udp:// <transport-class>,
можно использовать только для { ZMQ_RADIO | ZMQ_DISH } Только архетипы

В то время как ZeroMQ имеет транспортный класс udp:// готовый к использованиюкак для одноадресных, так и для многоадресных адресов AccessPoint пока невозможно заставить Context() создавать экземпляр такого источника данных для одноранговых одноранговых одноранговых устройств, отличных от ZeroMQ.


ZeroMQ может общаться с одноранговыми узлами, отличными от ZeroMQ,
, но чуть более tcp:// <transport-class>

одноранговые узлы без ZeroMQ могут подключатьсяиспользование простого носка, исправленного (по многим причинам архитектуры / дизайна API) внутри реализации ZeroMQ в ZeroMQ-совместимый масштабируемый формальный архетип с именем ZMQ_STREAM).Это здорово и позволяет использовать гомогенные стратегии для обработки и этих типов взаимодействующих одноранговых узлов, однако существует просто необходимость использовать транспортный класс tcp://, если это необходимо.


Как?

Учитывая, что ваш источник данных находится под вашим контролем, попытайтесь использовать его в экосистеме ZeroMQ, с которой он может быть удобно использован как любая другая ZeroMQ udp:// -кросс-соединенная AccessPoint.

Если конструктивные или «политические» ограничения мешают вам сделать это, принимающая сторона не может быть непосредственно ZeroMQ, поэтому решите создать шлюз протокола для конкретного приложения, опосредуя трафик не-ZeroMQ-udpк любой форме «расходных материалов» ZeroMQ, будь то ZMQ_STREAM по сравнению с plain-tcp: (если решено сделать функционально минималистичный дизайн прокси или решить оснастить такой прокси напрямую любым другим, более умным архетипом ZeroMQ, для связина более высоком уровне комфорта с вашим основным сборщиком данных / процессором).

Если аудио предназначено дляayload и накапливающаяся задержка - это проблема, лучше также узнать больше о том, как легко можно настроить производительность основного движка - увеличьте количество IOthreads, грамотно отобразив ZMQ_AFFINITY и ZMQ_PRIORITY настройки - все, что может повлиять на целевую задержку + конверты производительности пропускной способности.


Последнее, но не менее важное требование 10 [Hz]

thisодна действительно хорошая часть, которая проверит свое понимание координации асинхронных процессов.Основной механизм ZeroMQ (Context () - instance (s)) работает асинхронно и нескоординированным образом.

Это означает, что не существует прямого способа избежать накопленной задержки или проверить какой-либо из параметров без посредников,управляемый на одноранговый узел, асинхронный с помощью задания буфера очереди сообщений, чтобы " travel " - "back" - во времени, в режиме реального времени 10 [Hz] зондирование.

Если это сработает в слабой / «мягкой» (не строгой R / T) координации системы времени (без ограничений стабильности системы управления / критической системы / системы жизнеобеспечения или аналогичной системы)ответственность, как это имеет сложный дизайн системы R / T), и поэтому допускает определенное количество джиттера, связанного с выполнением кода RTT - / [транспортировка + (пере) обработка) - задержки умного дизайна .poll()Неблокирующие проверки на основе и, возможно, некоторые быстрые политики предварительного опустошения очереди могут помочь вам перейти на приемлемо быстрое и мягкое поведение RT, чтобы сделать монитор 10 [Hz] достаточно надежным.

Итак, действительно классные дни с ZeroMQ перед вами - удачи, сэр.Если вы еще не опоздали с Планом Проекта или крайним сроком, наступающим в понедельник, лучше всего прочитайте сказочную книгу Питера ХИНТЖЕНСА " Code Connected, Volume 1 ", где большинство жемчужин Zen-of-Ноль хорошо обсуждается и проверяется для конструкций.

...