ZMQ:从不同的计算机接收

ZMQ : Receive from different computers

我有不同的计算机发布到主计算机。我有他们的 IP 地址列表。当列表中只有一个 IP 时,下面的代码可以正常工作,但是当有多个 IP 时,它就不起作用了。尝试“尝试,除了”时似乎在尝试连接到 ipList 中的第二个索引时失败。

PortNum = 6666
sockets = [len( ipList )]
pollers = [len( ipList )]
context = zmq.Context()
        
for nIdx in range( 0, len( ipList ) ):
    ipAddr = ipList[nIdx]
        
    sockets[nIdx] = context.socket( zmq.SUB )
    sockets[nIdx].subscribe( '' )
            
    strTCP = 'tcp://{0}:{1}'.format( ipAddr, usePortNum )
    sockets[nIdx].connect( strTCP )
    pollers[nIdx] = zmq.Poller()
    pollers[nIdx].register(sockets[nIdx], zmq.POLLIN)
sockets = [len( ipList )]

这不会像您认为的那样创建长度为 len(ipList) 的列表。它创建一个包含单个条目的列表。因此,第二次通过循环,当您尝试访问列表中的下一项时,您会得到一个 IndexError

尝试这样的事情:

PortNum = 6666
sockets = []
pollers = []
context = zmq.Context()

for ipAddr in ipList:
    strTCP = f'tcp://{ipAddr}:{usePortNum}'

    socket = context.socket(zmq.SUB)
    socket.subscribe('')
    socket.connect(strTCP)

    poller = zmq.Poller()
    poller.register(socket, zmq.POLLIN)

    sockets.append(socket)
    pollers.append(poller)