【发布时间】:2020-03-30 03:33:34
【问题描述】:
我正在尝试了解使用 async_client 时 Paho MQTT C++ 库中各种回调机制的用法和行为,具体来说:
- mqtt::回调
- mqtt::iaction 监听器
- mqtt::connection_handler
我想要实现的目标:等待成功连接和成功订阅主题列表(以单个主题开头)的阻塞初始化方法,以及自动重新连接并在连接中断时重新订阅这些主题。
“async_subscribe”示例 (https://github.com/eclipse/paho.mqtt.cpp/blob/master/src/samples/async_subscribe.cpp) 建议我应该订阅 mqtt::callback::connected 中的主题。但是,它没有显示如何等待订阅成功完成。我的理解是,我不应该在连接的回调中对订阅令牌调用“等待”。如果我设置了一个等待的私有var _subscribeToken,似乎无法保证在等待连接令牌完成后是否已设置,即(伪代码):
void Callback::connected(const std::string& cause){
_subscribeToken = _client->subscribe(topic, qos, nullptr, action_listener);
}
初始化中:
token_ptr connectToken = connect(connectOpts);
connectToken->wait();
_subscribeToken->wait(); // but _subscribeToken may still be null at this point.
connectToken->wait 如果不能保证回调已经被调用,那它有什么意义呢?我很可能误解了某些东西,但我想指出正确的方向!
【问题讨论】: