Есть ли последствия для повторного подключения сокета ZMQ с тем же идентификатором?

Я подключаю сокет DEALER к ROUTER, используя:

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)


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

Кроме того, повторное использование одного и того же идентификатора не должно иметь негативных последствий, если предыдущий сокет для его использования больше не подключен... Согласно документацию, если сокет маршрутизатора еще не отказался от соединения с предыдущим сокетом (что может быть проблемой на практике), вы определите, как будет вести себя ваш сокет Router с опцией ZMQ_ROUTER_HANDOVER. Он либо отклонит новое соединение, либо передаст соединение новому сокету... Я предполагаю, что второе - это то, что вам нужно.

Я бы не подумал, что отклоненное соединение приведет к ошибке, которую вы видите, хотя я полагаю, что это возможно в зависимости от того, какой код следует за тем, что вы здесь предоставили. Если вы считаете, что это связано, просто проверьте успешное соединение, прежде чем пытаться использовать это соединение... Я не знаю, не удается ли привязка pyzmq (или сам ZMQ) или вам нужно проверить ее на отвергнутое соединение.

person Jason    schedule 12.03.2015