繁体   English   中英

ZeroMQ python 到 c++ 发布/订阅

[英]ZeroMQ python to c++ Pub / Sub

我有一个下面的 python 代码,它在 python - python PUB/SUB ZeroMQ ( pyzmq ) 场景中成功运行。

我可以通过 c++ 订阅这个 python 服务器吗?

我也添加了一个 c++ 客户端代码,但它不起作用。

Python:

def send_array_and_str(socket, img, string, flags=0):
    global count
    print(count , "  sended")
    ## numpy array gönderirken shape bilgilerini de msg olarak eklemek lazım
    md = dict(dtype=str(img.dtype), shape=img.shape)
    socket.send_string(str(count), flags | zmq.SNDMORE)
    socket.send_string(string, flags | zmq.SNDMORE)

    socket.send_json(md, flags | zmq.SNDMORE)
    socket.send(img, flags)
    count += 1
    # print(count)
    return


context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://*:5667")

C++

zmq::socket_t subscriber (context, ZMQ_SUB);
subscriber.connect("tcp://localhost:5556");

zmq::message_t update;
subscriber.recv(&update);

total_temp += temperature;

您的生产者(发布者)和消费者(订阅者)可以使用任何具有 ZeroMQ 绑定/库的语言。

你的制作人必须...

  1. 将 PUB 套接字绑定到端点。
  2. 向 PUB 套接字发送消息。

您的消费者必须...

  1. ...将 SUB 套接字连接到生产者绑定到的同一端点(主机:端口)(在本例中为"tcp://localhost:5556" )。
  2. ... 使用zmq_setsockopt订阅主题。 这让生产者知道向消费者发送消息。 (您的订阅者不会这样做。)

订阅主题是消息或多部分消息中第一个消息部分的前导字符。 可以传递一个空字符串作为主题来接收所有消息(我只是认为它是最小前缀字符串)。 参见 [http://api.zeromq.org/2-1:zmq-setsockopt]。

zmq_setsockopt(subscriber, ZMQ_SUBSCRIBE, "", 0);

“我可以通过 c++ 订阅这个 python 服务器吗?”

哦,当然可以。

上面提供的客户端代码不起作用,实际上它确实按照 API 的定义起作用,因为您确实订阅了SUB端。

所以它确实没有收到任何东西,完全符合记录的 ZeroMQ API。


如果从未使用过 ZeroMQ,
不妨在这里先看看《ZeroMQ原则不到五秒
在深入了解更多细节之前


.connect() -方法指向同一个port# ~ 5667也很有用,如果您希望SUB从那里提供任何有意义的服务PUB ,不是吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM