【发布时间】:2020-04-03 22:18:01
【问题描述】:
我正在尝试在 ZeroMQ 中进行 PUB-SUB 通信,其中 PUB 在 C++ 中,SUB 在 python 中。我正在使用 python 3.8、ZeroMQ 4.3.2、pyzmq 18.1.1 和 cppzmq 4.5.0
酒吧:
int main()
{
Sleep(10000);
zmq::context_t context(1);
zmq::socket_t publisher(context, ZMQ_PUB);
publisher.bind("tcp://*:5556");
int zipcode, temperature, relhumidity;
while (true) {
// Get values (first supposed to be random)
zipcode = 10001;
temperature = 27;
relhumidity = 61;
// Send message to the subscriber
zmq::message_t message(20);
snprintf((char *)message.data(), 20, "%05d %d %d", zipcode, temperature, relhumidity);
publisher.send(message, zmq::send_flags::none);
std::fprintf(stderr, "[INFO] Sent data: %i, %i, %i \n", zipcode, temperature, relhumidity);
if (fValue && j >= fValue) {
break;
}
j++;
}
}
子:
import sys
import zmq
# Socket to talk to server
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://localhost:5556")
# Subscribe to zipcode, default is NYC, 10001
zip_filter = "10001"
# Python 2 - ascii bytes to unicode str
if isinstance(zip_filter, bytes):
zip_filter = zip_filter.decode('ascii')
socket.setsockopt_string(zmq.SUBSCRIBE, zip_filter)
# Process 5 updates
for update_nbr in range(3):
string = socket.recv_string()
zipcode, temperature, relhumidity = string.split()
print("Received data : %s , %d , %d" % (zip_filter, temperature, relhumidity))
但我无法让它工作,因为 SUB 在string = socket.recv_string() 上一直等待,而 PUB 发送消息时没有错误。实际上,它返回已发送消息的长度。
注意事项:
- Sleep 用于试用,以便能够在 PUB 发送之前启动 SUB。但是,如果我删除它并先启动 SUB,我也会有同样的行为。
- 如果我执行以下操作,它会打印
none:
Err = socket.connect("tcp://localhost:5556")
print(Err)
我是 ZeroMQ 的新手,我真的不知道从哪里开始解决这个问题。有什么想法吗?
【问题讨论】:
-
为引用所有发行版本添加了 +1。包括 ZeroMQ - 软件工程工艺的良好标志
标签: c++ python-3.x zeromq