我有一个下面的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绑定/库的语言。
你的制片人必须。。。
- 将PUB套接字绑定到端点
- 将消息发送到PUB套接字
您的消费者必须。。。
- 。。。将SUB套接字连接到生产者绑定的同一端点(host:port((在本例中为
"tcp://localhost:5556"
( - 。。。使用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
也会很有用,不是吗?