yanbin's Blog
使用 libmosquitto 遇到的几个问题
1. 使用 libmosquitto 时必须要调用 mosquitto_loop_forever() 或者 mosquitto_loop();
2. mosquitto_loop_forever(); mosquitto_loop() 的第三个参数 max_packets 目前并没有使用,
但是为了保持兼容性,必须设置为 1.
3. mosquitto_loop_start() 并不是在 thread 中调用,而是会启动一个 thread 处理 network traffic,
称为 network thread; 同样的 mosquitto_loop_stop() 不是一定要在 thread 中调用,
而是结束之前通过 mosquitto_loop_start() 创建的 network thread,
mosquitto_loop_stop() 会等待 network thread 结束,而为了让 network thread 结束,
又必须提前调用 mosquitto_disconnect(),
不过可以通过设置 mosquitto_loop_stop() 的第二参数来强制 network thread 结束;
4. 注册 will message 同时指定 will topic。mosquitto_will_set() 的第二个参数就是指定 will topic 的。
这就是 mqtt 里所说的 will message 有相应的 topic, mosquitto_sub, mosquitto_pub 都有参数,
可以指定 will topic: --will-topic;
5. 如果不使用 mosquitto_loop() 或者 mosquitto_loop_forever() 可以使用:
(a) mosquitto_socket() 获取 connect socket handle;
(b) 使用 select() 查询 socket handle 可读/可写;
(c) 如果 select() 返回可读,mosquitto_read() 用来读取 message;
(d) 如果返回可写,mosquitto_write() 用来发送 message;
(e) 如果超时 mosquitto_loop_misc() 用来执行一些杂项;
6. libmosquitto 中 mosquitto_user_data_set() 可以设置 userdata,
也可以在 mosquitto_new() 初始化时指定 userdata;
但是并没有接口获得 userdata; 毕竟 uesrdata 是外部数据,user 自己维护 userdata,
当然应该知道指定给 mosquitto object 的 userdata 是哪一个。
7.保证 libmosquitto 和/或 mosquitto 版本一致。
mosquitto-1.3.x 与 mosquitto-1.4 有兼容性问题。
客户端使用中级 CA 签发的证书与 broker 建立 ssl 连接时,会有 tlsv1 alert unknown ca error.