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套接字连接到生产者绑定的同一端点(host:port((在本例中为"tcp://localhost:5556"(
  2. 。。。使用CCD_ 2订阅主题。这使生产者知道要向消费者发送消息。(您的订阅者不执行此操作。(

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

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

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

哦,当然可以。

上面介绍的客户端代码不起作用,好吧,实际上它确实按照API的定义起作用,因为您没有订阅SUB端。

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

如果您希望SUB能够从那里为PUB提供任何有意义的东西,那么将.connect()方法引导到相同的port#~ 5667也会很有用,不是吗?

最新更新