Куда zmq_send () отправляет несколько соединений? - PullRequest
0 голосов
/ 25 апреля 2020

Допустим, у меня есть ZMQ_PUSH сокет, подключенный к нескольким пирам, и я использую zmq_send() для отправки чего-либо через эти сокеты.

Я ищу пару часов сейчас, и я не могу найти в документации ZMQ, куда будет отправлено мое сообщение.

Разумное предположение, что оно будет отправлено всем подключенным узлам, но они говорят, что используется алгоритм циклического перебора , что меня немного смущает. Означает ли это, что я должен отправлять одно и то же сообщение столько раз, сколько у меня есть соединения?

1 Ответ

1 голос
/ 25 апреля 2020

Q : " Куда zmq_send() отправляет несколько соединений? "

Отправляет сообщения в зависимости от того, какой из используется фактический архетип.

PUB/SUB отправляет каждое сообщение всем одноранговым узлам, которые положительно подписаны на Topi c (двоичное сопоставление левой стороны в виде строки полезной нагрузки) тогда как некоторые внутренние детали в выпусках до v3 фактически физически перемещали любое сообщение всем одноранговым узлам (и там SUB -side Context() -инстанции, вроде ALAP, выполняли Topi c - фильтрация), не так как v3 +.

PUSH/PULL не имеет этого «обещания», так что лучше попробуйте представить сторону PUSH в качестве командира очереди заданий, и каждый рабочий на PULL получает (здесь, в циклическом порядке) следующую задачу из очереди заданий, как это делают общие балансировщики нагрузки.

Каждый другой из встроенных архетипов - REQ/REP, XPUB/XSUB, DEALER/ROUTER, PAIR/PAIR, ... - имеют аналог Мы сформулировали «обещанное поведение», поэтому сервисы ZeroMQ могут основываться на объединении этих тривиальных архетипов в некоторые более сложные и структурированные групповые поведения для приложений обмена сообщениями / сигнализации.

Q : " Разумным предположением является то, что оно будет отправлено всем подключенным узлам "

Если бы это было так, было бы потеряно ключевое свойство PUSH/PULL " обещанное поведение "и не было бы никакой разницы между этим и PUB/SUB Архетипом (который имеет еще меньше смысла для разработки двух вещей, которые делают то же самое, не так ли? )


В случае, если кто-то никогда не работал с ZeroMQ,
здесь можно с первого взгляда посмотреть на "Принципы ZeroMQ менее чем за Пять секунд"
, прежде чем углубляться в детали



...