Как сделать «разделяемую переменную переменную» с ZeroMQ? - PullRequest
1 голос
/ 06 ноября 2019

Я использую ZeroMQ.

Я хочу, чтобы узел B подписался на узел A. Узел A будет отправлять (PUB?) Значения некоторой ' volatile-переменной '(скажем, положение какого-то объекта). « Volatile » в этом случае означает, что узел B заботится только о самом последнем значении.

В результате следует, что A может отправлять значения подписчикам, но если два значения переменной когда-либовстать в очередь в исходящих (или входящих) очередях, тогда самое последнее значение заменит более ранние значения. И еще один результат: нет высокой отметки.

Я могу достичь этого с помощью PUB/SUB, очевидно, но это не получит такие вещи, как «самая недавняя ценность»всегда побеждает. Кажется, что для этого есть какой-то установленный шаблон, но я его не нашел.

(Полагаю, это означает, что я хочу, чтобы шаблон сокетов ZeroMQ работал так, как если бы он был чистым udp).

1 Ответ

1 голос
/ 06 ноября 2019

Q : Как создать 'разделяемую переменную с переменным значением' (первое-самое последнее значение- всегда -wins) с ZeroMQ?

В случае, если ваша логика уровня приложения удовлетворена PUB/SUB - одной PUB -слой,.send() -ing сообщений, других SUB -подписаться на их соответствующую тему по выбору, чтобы запустить .recv() -ing архетип Шаблон масштабируемой формальной связи, мы можем точно настроить конфигурациютак как он отвечает всем вашим требованиям, выраженным выше (первое-самое последнее значение- всегда -победает)

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


Правильный шаг настройки:

Хитрость заключается в том, чтобы использовать .setsockopt( ZMQ_CONFLATE, 1 ) метод для «переключения» - ON"этот самый кии поведения, управляемые экземплярами Context() -инженера без уведомления пользователя, прямо «внутри» политики администраторов очередей.

Если установлено, сокет долженхранить только одно сообщение в своей входящей / исходящей очереди, причем это сообщение является последним полученным / последним отправленным сообщением. Игнорирует опции ZMQ_RCVHWM и ZMQ_SNDHWM. Не поддерживает составные сообщения , в частности, только одна его часть хранится во внутренней очереди сокетов.

Применимые типы сокетов ZMQ_PULL, ZMQ_PUSH, ZMQ_SUB, ZMQ_PUB, ZMQ_DEALER


Это было так просто!

Всего наилучшего в овладении искусством Zen-of-Zero.

...