如何配置多发布/单子python ZMQ Ubuntu

如何配置多发布/单子python ZMQ Ubuntu,python,zeromq,publish-subscribe,pyzmq,Python,Zeromq,Publish Subscribe,Pyzmq,我有两个vm(VirtualBOx、ubuntu18.04和pythonzmq[16.0.2-2build2])在同一台物理机器(Win10)中运行。两台机器都配置为网桥,可以成功ping 192.168.1.66-192.168.1.55。我遵循了这个教程。如果PUB(服务器)配置为 import zmq import random import sys import time port = "5557" if len(sys.argv) > 1: port

我有两个vm(VirtualBOx、ubuntu18.04和pythonzmq[16.0.2-2build2])在同一台物理机器(Win10)中运行。两台机器都配置为网桥,可以成功ping 192.168.1.66-192.168.1.55。我遵循了这个教程。如果PUB(服务器)配置为

import zmq
import random
import sys
import time

port = "5557"
if len(sys.argv) > 1:
    port =  sys.argv[1]
    int(port)

context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://*:%s" % port)
while True:
    topic = random.randrange(9999,10005)
    messagedata = random.randrange(1,215) - 80
    print "%d %d" % (topic, messagedata)
    socket.send("%d %d" % (topic, messagedata))
    time.sleep(1)
以及分包商(客户)作为

因为我想要一个具有多个服务器(PUB)的单一客户端(SUB),它们可以是数百甚至数千个,所以为每个PUB配置一个IP是不可行的。有没有不指定IP的订阅方式?或者至少是广播。我已尝试在
socket.connect(“tcp://IP:%s%port)

“*”

给出了错误:

Traceback (most recent call last):
  File "sub_client.py", line 18, in <module>
    socket.connect ("tcp://*:%s" % port)
  File "zmq/backend/cython/socket.pyx", line 528, in zmq.backend.cython.socket.Socket.connect (zmq/backend/cython/socket.c:5980)
  File "zmq/backend/cython/checkrc.pxd", line 25, in zmq.backend.cython.checkrc._check_rc (zmq/backend/cython/socket.c:8400)
zmq.error.ZMQError: Invalid argument
回溯(最近一次呼叫最后一次):
文件“sub_client.py”,第18行,在
socket.connect(“tcp://*:%s”%port)
文件“zmq/backend/cython/socket.pyx”,第528行,位于zmq.backend.cython.socket.connect(zmq/backend/cython/socket.c:5980)中
文件“zmq/backend/cython/checkrc.pxd”,第25行,在zmq.backend.cython.checkrc.\u check\u rc(zmq/backend/cython/socket.c:8400)中
zmq.error.ZMQError:参数无效
192.168.1.1(GW)、192.168.1.255(广播)、localhost/127.0.0.1及其IP(192.168.1.55)->不接收消息

192.168.1.66(服务器的IP)->确实接收消息,但在大型系统中不实用

有办法解决这个问题吗

Q:有什么办法解决这个问题吗

避免违反任何API记录的属性。虽然
.bind()
-方法可以用于
tcp://
-传输类尝试确实绑定到任何
本地主机
-端IP地址,但是
.connect()
-方法显然无法绑定

ZMQError
中所述:

socket.connect(“tcp://*:%s”%port)

zmq.error.ZMQError:参数无效


更正IP地址目标,
.connect(“tcp://{0:}:{1:}.format(IP,端口))
-方法尝试“振铃以获得连接”。

我应该如何在IP和端口中初始化?端口如果并且仅当您在发布端使用了非默认的端口,则为子端设置相同的端口;o) IP呢?这难道不是酒吧一方的IP地址吗?拓扑结构在这里:那么问题出在哪里?我只在配置发布IP地址`socket.connect(“tcp://{0:}:{1:}”)。format(“192.168.1.66”,“5556”)`时接收数据包。如果我有多个发布服务器怎么办?我无法使用来自这些发布服务器的数千个IP配置订阅服务器
Traceback (most recent call last):
  File "sub_client.py", line 18, in <module>
    socket.connect ("tcp://*:%s" % port)
  File "zmq/backend/cython/socket.pyx", line 528, in zmq.backend.cython.socket.Socket.connect (zmq/backend/cython/socket.c:5980)
  File "zmq/backend/cython/checkrc.pxd", line 25, in zmq.backend.cython.checkrc._check_rc (zmq/backend/cython/socket.c:8400)
zmq.error.ZMQError: Invalid argument