【问题标题】:ZeroMQ python to c++ Pub / SubZeroMQ python 到 c++ Pub / Sub
【发布时间】:2020-04-17 14:12:07
【问题描述】:

我有一个下面的 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;

【问题讨论】:

  • 您的 C++ 代码不应该至少连接到与 Python 代码相同的端口吗?

标签: c++ zeromq


【解决方案1】:

您的生产者(发布者)和消费者(订阅者)可以使用任何具有 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);

【讨论】:

    【解决方案2】:

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

    哦,当然可以。

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

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


    如果您从未使用过 ZeroMQ,
    您可以在这里先看看"ZeroMQ Principles in less than Five Seconds"
    在深入了解更多细节之前



    如果您希望 @987654326 @ 可以从服务 PUB 那里得到任何有意义的东西,不是吗?

    【讨论】:

      猜你喜欢
      • 2018-08-23
      • 1970-01-01
      • 2020-04-03
      • 1970-01-01
      • 2015-04-21
      • 2013-06-20
      • 1970-01-01
      • 2011-08-11
      • 2012-11-24
      相关资源
      最近更新 更多