最近被接发消息折腾的够呛,先后用到rti-dds和zmq进行信息交互。最让人头痛的当属zmq的使用,在没有任何积累的情况下顺利接发消息耗费了我大约一周的时间。主要碰到2个问题:
1.topic设置:一定要设置非空topic,否则无法接收消息。
开发手册明明写着设置空topic,会接收所有消息。但经过我验证,是错误的。
而且pub和sub端,需要设置相同的topic(貌似是废话)。
2.zmq_bind zmq_connect "tcp://127.0.0.1:port_num" "tcp://localhost:port_num"
在sub端,对于dns地址,必须用zmq_connect。即:zmq_connect("tcp://localhost:port_num");
而在此时,pub端需要用zmq_bind连接,发送消息。具体原因不详。
pub端代码如下:
const string host = string("tcp://127.0.0.1:5803");
const string topic("gnss_sensor");
void *context = zmq_ctx_new();
assert(nullptr != context);
void *socket = zmq_socket(context, ZMQ_PUB);
assert(nullptr != socket);
int recv_timeout = 5000;
int rc =
zmq_setsockopt(socket, ZMQ_RCVTIMEO, &am