Как установить INVERT_MATCHING на сокет ZeroMQ PUB с помощью PyZMQ?

Я работаю с PyZMQ 16.0.4 при поддержке ZeroMQ 4.1.6 и пытаюсь лучше понять параметр сокета INVERT_MATCHING.

Я пробовал следующее в repl:

>>> import zmq
>>> context = zmq.Context.instance()
>>> pubsock = context.socket(zmq.PUB)
>>> pubsock.INVERT_MATCHING = 1

Последняя строка выдает ошибку

AttributeError: Socket has no such option: INVERT_MATCHING.

Я просто вижу ошибку в PyZMQ?

Или мне нужно сделать что-то другое, чтобы установить этот параметр?


person purple_arrows    schedule 13.03.2018    source источник


Ответы (2)


Поехали: используя .setsockopt()

print( "ZeroMQ version ought be 4.2+ ... Hope it is... " )
print( zmq.version() )
print( pubsock.setsockopt.__doc__ )
pass;  pubsock.setsockopt( zmq.INVERT_MATCHING, 1 )

Плюс лучше всего перечитать документацию:

Изменяет поведение фильтрации сокетов PUB-SUB, если установлено значение 1.

На сокетах PUB и XPUB сообщения будут отправляться во все подключенные сокеты, кроме тех, которые подписаны на префикс, соответствующий сообщению. На сокетах SUB это приводит к тому, что пользователь получает только входящие сообщения, которые не соответствуют ни одной из подписок сокета.

Всякий раз, когда для ZMQ_INVERT_MATCHING установлено значение 1 на сокете PUB, для всех подключающихся к нему сокетов SUB также должно быть установлено значение 1. В противном случае сокеты SUB будут отвергать все, что отправляет сокет PUB. их.

XSUB сокеты не должны этого делать, поскольку они не фильтруют входящие сообщения.

person user3666197    schedule 13.03.2018
comment
!!! Я установил ZMQ 4.2.3 с помощью homebrew, но zmq.version() возвращает 40106 (4.1.6). Спасибо за указатель! - person purple_arrows; 14.03.2018
comment
Ах да, я просто сначала проверяю, действительно ли это решает мою проблему. Я пока не понял, почему/как решить неправильную версию ZeroMQ - person purple_arrows; 14.03.2018
comment
При всем уважении, это другая тема/деятельность, не связанная с анализом первопричины + этапы самодиагностики + доставлено напоминание по API-документации, не так ли? - person user3666197; 14.03.2018
comment
Я не могу принять ответ, пока не подтвержу, что он решит проблему. Если бы вы сказали «Попробуйте переместить свой ноутбук», я бы отнесся к этому так же… Я бы попробовал и посмотрел, решит ли это проблему, а затем приму это, если да. Наберитесь терпения. - person purple_arrows; 14.03.2018
comment
Попробуйте перемещать свой ноутбук – серьезно? Кто это сказал? Делай так, как чувствуешь. Но даже если вам никогда не удастся установить 4.2 API/DLL, ответ будет правильным и полным, поэтому добавлять все больше и больше если-s и когда-s возможно, но не связано на исходный вопрос, не так ли? - person user3666197; 14.03.2018
comment
Вы утверждаете, что это правильно и полно. Я рад, что ты уверен. Но в конечном счете, это мое решение, потому что это мой вопрос. Я понятия не имею прямо сейчас, правильно ли это, тем более полно. Хорошего дня - person purple_arrows; 14.03.2018