【问题标题】:How to handle multiple publishers on same port in zmq?如何在 zmq 中处理同一端口上的多个发布者?
【发布时间】:2015-08-13 16:45:25
【问题描述】:

之前有人问过这个问题,here。我有完全一样的问题。我想从一堆不同的进程中发布,并且每次都使用相同的端口。

我尝试了答案中提供的解决方案,但这对我不起作用。我收到错误

    File "/usr/local/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/usr/local/lib/python2.7/multiprocessing/process.py", line 114, in run
    self._target(*self._args, **self._kwargs)
  File "/home/akay/afk/multi.py", line 18, in to_zmq
    socket.connect("tcp://*:%s" % port)
  File "zmq/backend/cython/socket.pyx", line 478, in zmq.backend.cython.socket.Socket.connect (zmq/backend/cython/socket.c:4308)
ZMQError: Invalid argument

我的代码是这样的,基本上直接取自 zmq 文档 herehere 中的示例:

# Socket to talk to server
port = '5556'
context = zmq.Context()
socket = context.socket(zmq.SUB)
print "Listening for stream...", m
socket.bind("tcp://localhost:%s" % port) #change connect to bind, as per answer above
socket.setsockopt(zmq.SUBSCRIBE, topicfilter)

我使用的是 python 2.7,以及最新版本的 zmq。知道我可能做错了什么吗?

【问题讨论】:

  • 在套接字消息的内容中添加一个标识符(作为虚拟端口),以通过 UUID 识别每个不同的进程(例如)
  • 谢谢。您能否更具体地了解套接字消息的内容?我刚开始使用 zmq,但我还在摸索。
  • 嗯,我试图了解实际问题,是您的软件问题,即如何识别同一套接字上的不同客户端或网络问题,重新使用相同的套接字/端口连接?我的评论指的是第一种情况
  • 我说的是第二种情况。
  • 您似乎收到了发布者的错误,但您向我们展示了订阅者的代码。显示发布者的代码。

标签: python sockets port zeromq pyzmq


【解决方案1】:

嗯,错误很明显:

    [...]
    socket.connect("tcp://*:%s" % port)
    [...]
ZMQError: Invalid argument

您无法连接到*,您必须指定一个 IP 地址(服务器 IP 地址)。如果客户端和服务器都在一台机器上运行,请尝试使用localhost127.0.0.1

【讨论】:

  • 我接受这个答案,因为这个问题已经过时了,但需要注意的是我还没有为自己验证解决方案(我不再能够轻松访问代码,而是以另一种方式解决了问题)。
  • 这个答案可能不应该被接受。请参阅此处的示例代码learning-0mq-with-pyzmq.readthedocs.org/en/latest/pyzmq/…
  • @Wapiti:你能解释一下为什么它不应该被接受吗?我的回答是正确的,它说明了为什么您会收到 Invalid argument 错误。
  • 你可能是对的——原始问题中的链接说切换绑定和连接。你是说问题是当你这样做时你还需要切换参数,(这就是我在我的代码中没有做的)。所以,你有socked.connect(''tcp://localhost:%s' %port
  • @Wapiti:我的意思是您的问题是关于您遇到的特定错误:ZMQError: Invalid argument(这是您目前的问题)。该错误是由于您的代码尝试连接到*,但您无法连接到*;您需要指定 IP 地址,否则使用localhost。如果您这样做,那么您不会收到您在问题中发布的错误。如果在那之后,您仍然有其他问题,那么您应该提出一个新问题来解释您的新问题和更新的代码。 ;-)
猜你喜欢
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
  • 1970-01-01
  • 2013-07-11
相关资源
最近更新 更多