python - Pub Sub 只能在一个方向上工作

标签 python raspberry-pi zeromq raspbian pyzmq

所以我正在使用 ZeroMQ 的 python 绑定(bind),试图将消息发送到网络上的几个树莓派,用于一个艺术项目。问题是我在树莓派上没有收到任何消息。更糟糕的是,我可以:

  • 从 raspberry pi 发布消息并在我的笔记本电脑 (osx) 上接收它们
  • REQ/REP 模型双向工作(osx -> RPI 和 RPI -> osx)

我认为这与两台设备上的防火墙有关,我在两台设备上都禁用了防火墙。没有运气。

有人有什么想法吗?这是我的代码:

ZMQ Publisher

import time
import zmq


def main():
    port = 5563

    # Prepare our context and publisher
    context = zmq.Context()
    publisher = context.socket(zmq.PUB)
    publisher.bind("tcp://*:" + str(port))

    while True:
        # Write two messages, each with an envelope and content
        publisher.send_multipart([b"A", b"We don't want to see this"])
        publisher.send_multipart([b"B", b"We would like to see this"])
        time.sleep(1)

    # We never get here but clean up anyhow
    publisher.close()
    context.term()

if __name__ == "__main__":
    main()

ZMQ Subscriber

import zmq
import sys


def main():
    ip = sys.argv[1]
    port = 5563
    string = "tcp://" + ip + ":" + str(port)

    # Prepare our context and publisher
    context = zmq.Context()
    subscriber = context.socket(zmq.SUB)
    subscriber.connect(string)
    subscriber.setsockopt(zmq.SUBSCRIBE, b"B")

    while True:
        # Read envelope with address
        [address, contents] = subscriber.recv_multipart()
        print("[%s] %s" % (address, contents))

    # We never get here but clean up anyhow
    subscriber.close()
    context.term()

if __name__ == "__main__":
    main()

最佳答案

已解决。有两个问题:

首先-因为我使用的是 python3,所以我必须确保在更新/安装 python 模块时使用的是 pip-3.2 命令

其次 - 在我的笔记本电脑上,我使用的是 pyzmq 14.6.0,而我在 PI 上使用的是 2.2.0。我已经更新了它,但是使用了 pip 而不是 pip-3.2。一旦我正确更新了 pyzmq,它就会按预期工作。

关于python - Pub Sub 只能在一个方向上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30294072/

相关文章:

python - 如何更改Python解释器中预定义的注释字符 '#'?

python - 在 Django 应用程序中设计用于内部和远程使用的 API

python - 使用lora接收树莓派上的杂乱数据

node.js - 如何从本地网络中的另一台电脑访问我的 React 应用程序?

python - 重复数据被存储到数据库中

python - 如何使用 zeromq 和线程或异步处理对 python 程序的多个请求?

python - 仅获取类的已声明方法(不包括继承类的方法)

Python 在函数返回时挂起

php - 在 Windows 10 和 PHP7 上将 ZeroMQ PHP 扩展添加到 XAMPP

python - 使用具有跨平台支持的 python 调整显示分辨率