我试图了解使用 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 有什么意义呢?我很可能误解了某些东西,但我想指出正确的方向!