[英]How to implement simple ZeroMQ Pub-Sub communication between Python publisher and C++ subscriber?
[英]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 绑定/库的语言。
你的制作人必须...
您的消费者必须...
"tcp://localhost:5556"
)。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.