我正在尝试使用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++和蚊子库的例子。提前谢谢。
发布于 2021-08-06 13:01:34
如果有疑问,请查看tests
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
回调并像这样实现它来从发布的消息中检索这些属性:
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. */
}
}
https://stackoverflow.com/questions/68681521
复制相似问题