【问题标题】:How can I publish a file using Mosquitto in c++?如何在 C++ 中使用 Mosquitto 发布文件?
【发布时间】:2014-07-10 14:13:07
【问题描述】:

我正在使用 mosquitto c++ 包装器发布消息/文件。

在我的测试中,我可以轻松地发送包含文本的消息,但我该如何发送文件呢?

我的发布者方法是:

bool Publisher::publish(const char* message) {
    const int ret = mosquittopp::publish(NULL, topic_, strlen(message),
        (uint8_t*) message);
    /* custom log for mosquitto passing res and what I'm doing */
    MosquittoLog::checkResult(ret, "sending message"); 
    return (ret == MOSQ_ERR_SUCCESS);
}

我找到this post 解释了如何使用 python 发布文件。
在 c++ 中几乎一样吗?
如果是,如何区分订阅服务器上的文件和纯文本?

void Subscriber::on_message(const struct mosquitto_message* message) {
/* pseudode
   if message is file do A
   else if plainText do B    
*/
}

【问题讨论】:

    标签: c++ linux file mqtt mosquitto


    【解决方案1】:

    广义上:

    发布文件

    1. 将文件读入内存缓冲区
    2. 通过它,它的发布长度(...)

    读取文件

    http://courses.cs.vt.edu/cs2604/fall02/binio.html#read

    出版

    我从 mosquitto 文档中不明白的是,您是否可以在发布缓冲区后立即销毁缓冲区,或者它是否需要在发送 MQTT 消息之前一直存在。

    区分数据类型

    要么在负载前加上一个描述数据类型的标志。或者对不同的数据类型使用不同的 MQTT 主题。如果做不到这一点,并且根据您需要的空间效率,您可以将有效负载包装在 protobuf、JSON 或 XML 消息中。

    【讨论】:

    • 所以区别对我不利,检查有效载荷,正如你所建议的那样。好的,这是我需要知道的。我希望有最简单快捷的方法!顺便说一句,谢谢!
    • 有疑问,我会在响应后销毁缓冲区!
    • 是的。它在 MQTT 标准中被“有效负载:包含用于发布的数据。数据的内容和格式是特定于应用程序的”。见第 3.3 节:public.dhe.ibm.com/software/dw/webservices/ws-mqtt/…
    • 我将查看 mosiqutto 内部并回答有效载荷问题。无论如何我需要知道:)
    • 您可以立即释放您的有效载荷。
    猜你喜欢
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 2022-07-05
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    相关资源
    最近更新 更多