Используйте ZeroMQ для пересылки пакетов в интерфейсе

#networking #zeromq

#сеть #zeromq

Вопрос:

Возможно ли использовать ZeroMQ в качестве промежуточной точки, где разные программы могут отправлять пакеты на ip:port комбинированный или альтернативный сетевой интерфейс и заставлять ZeroMQ пересылать любые такие пакеты в определенном исходящем соединении?

Поэтому, по сути, я не хочу отправлять данные, сгенерированные мной программно, но предоставляю некоторую конечную точку для других приложений для беспрепятственной связи, как они всегда делали, но в основном используя ZeroMQ в качестве посредника, который будет соответствующим образом маршрутизировать трафик.

Ответ №1:

Вопрос: «… должен ли ZeroMQ пересылать какие-либо такие пакеты в определенном исходящем соединении? «

Учитывая, что существует встроенный способ избежать использования любого из распространенных архетипов шаблонов формальных коммуникаций ZeroMQ с масштабируемым формальным шаблоном ZeroMQ из арсенала { PUB/SUB | XPUB/XSUB | REQ/REP | XREQ/XREP | ROUTER/DEALER | PUSH/PULL | RADIO/DISH | CLIENT/SERVER | ... } , есть шанс использовать «сырой» режим, когда действительно socket-FileDescriptor может начать обрабатываться инструментарием ZeroMQ { .poll() | .send() | .recv() } . методы.

Для достижения успеха в вашем предполагаемом варианте использования, тем не менее, необходимо будет тщательно следовать опубликованной спецификации API, поскольку ZMQ_STREAM сокеты имеют некоторые встроенные функции, которые должны быть отражены в вашей MiTM-прокси-обработке (удаление добавленного идентификатора, добавляемого по прибытии, поток-безопасность и т.д. ).

В любом случае, в то время как основная документация ZMQ-RFC стабильна, документация API отражает последние изменения, поскольку основная библиотека все еще продолжает развиваться, поэтому внимательно следите за тем, что вы реализуете (на основе текущей версии) и что следует учитывать для потенциальных дальнейших изменений версии и / или прекращенных функций.

Может быть интересно также использовать эти zmq_socket_monitor() функции, поскольку в этом сценарии вы будете использовать класс, ориентированный на соединение tcp:// .