首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过MQTT v5使用libmosquitto发出请求并获得响应?

如何通过MQTT v5使用libmosquitto发出请求并获得响应?
EN

Stack Overflow用户
提问于 2021-08-06 12:22:34
回答 1查看 333关注 0票数 0

我正在尝试使用libmosquitto发出请求(发布到'test/topic'主题),并希望获得基于客户端(发送者) id的响应。因此,这意味着客户端将发布到'test/topic',它将自动订阅'test/topic/<client_id>'

服务器已经订阅了'test/topic',当它成为消息时,它将向'test/topic/<client_id>'发送一个响应(publish),客户端订阅该响应是为了首先接收该响应。

这里的挑战是如何获得<client_id>,对吗?我已经在python和js中做到了这一点,客户端将在有效负载中发送元数据或属性,服务器可以将其解包以获得client_id。然而,我现在使用的是C++,这很令人沮丧,因为我不知道如何获得这些属性。

以下是如何在python中完成此操作的example。我只想对c++做同样的事情

我用的是我刚才提到的库蚊子。我甚至没有一个例子可以展示,因为我不知道怎么做。关于如何使用c++库来做这件事,几乎没有例子(我想这很让人困惑,因为蚊子是一个著名的库)。

我希望有人有类似的问题,或者可以发布一个c++和蚊子库的例子。提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2021-08-06 13:01:34

如果有疑问,请查看tests

代码语言:javascript
运行
复制
const char *my_client_id = ...;
mosquitto_property *proplist = NULL;

mosquitto_property_add_string_pair(&proplist, MQTT_PROP_USER_PROPERTY, "client_id", my_client_id);
mosquitto_publish_v5(mosq, &sent_mid, "test/topic", strlen("message"), "message", 0, false, proplist);
mosquitto_property_free_all(&proplist);

由于您在评论中提出了要求,您可以通过首先使用mosquitto_message_v5_callback_set设置on_message回调并像这样实现它来从发布的消息中检索这些属性:

代码语言:javascript
运行
复制
void on_message(struct mosquitto *mosq, void *obj, const struct mosquitto_message *message, const mosquitto_property *props) {
    std::string topic{message->topic};
    if (topic == "test/topic") {
        const char *client_id = nullptr;
        mosquitto_property_read_string_pair(props, MQTT_PROP_USER_PROPERTY, nullptr, &client_id, false);
        if (client_id) {
            /* client_id contains a client id. */
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68681521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档