Има ли последствия от повторното свързване на ZMQ сокет със същата самоличност?

Свързвам гнездо DEALER към РУТЕР, използвайки:

socket = context.socket(zmq.DEALER)
socket.setsockopt(zmq.IDENTITY, 'id')
socket.connect('tcp://myhost:3456')

и честото повторно свързване е чрез извикване:

socket.close()
socket = context.socket(zmq.DEALER)
socket.setsockopt(zmq.IDENTITY, 'id')
socket.connect('tcp://myhost:3456')

Използвам един и същ id всеки път и се чудех дали има някакви последици от това? Също така от време на време виждам следната грешка в конзолата и не съм сигурен дали е свързана:

Invalid argument (bundled/zeromq/src/stream_engine.cpp:831)

person nickponline    schedule 11.03.2015    source източник


Отговори (1)


Мога ли да попитам защо затваряте и отваряте отново сокета толкова често? Особено ако, както във вашия код тук, вие незабавно отваряте отново сокета? Обикновено трябва да има много малко причини за това.

Освен това не трябва да има лош ефект от повторното използване на същия идентификатор, стига предишният сокет, който да го използва, вече да не е свързан... Според документацията, ако сокетът на рутера все още не е прекъснал връзката си с предишния сокет (което може или не може да е проблем на практика), вие определете как ще се държи сокетът на вашия рутер с опцията ZMQ_ROUTER_HANDOVER. Той или ще отхвърли новата връзка, или ще предаде връзката към новия сокет... Предполагам, че второто е това, което търсите.

Не мисля, че отхвърлената връзка ще доведе до грешката, която виждате, въпреки че предполагам, че е възможно в зависимост от това кой код следва това, което сте предоставили тук. Ако смятате, че е свързано, просто се уверете, че сте проверили за успешна връзка, преди да опитате да използвате тази връзка... Не знам дали обвързването на pyzmq (или самият ZMQ) се проваля трудно или трябва да го тествате на отхвърлена връзка.

person Jason    schedule 12.03.2015