重新连接具有相同标识的ZMQ套接字是否有影响?

时间:2015-03-11 23:33:02

标签: python zeromq pyzmq

我使用以下方法将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)

1 个答案:

答案 0 :(得分:1)

请问您为何经常关闭并重新打开插座?特别是,如果您在此处的代码中,您立即重新打开套接字?通常情况下应该没有理由这样做。

除此之外,重新使用相同的ID应该没有不良影响,只要前一个使用它的套接字不再连接...根据the documentation,如果路由器套接字还没有放弃它与前一个套接字的连接(实际上可能是也可能不是问题),您可以使用ZMQ_ROUTER_HANDOVER选项确定路由器套接字的行为方式。它会拒绝新的连接,或者它会将连接移交给新的套接字......我假设第二个是你所追求的。

我不认为被拒绝的连接会导致您看到的错误,但我认为这可能取决于您在此处提供的代码。如果您认为它是相关的,只需确保在尝试使用该连接之前检查连接是否成功...我不知道pyzmq绑定(或ZMQ本身)是否会失败或者您是否必须在被拒绝的连接上进行测试。