如何在c++中使用蚊子发布文件?

How can I publish a file using Mosquitto in c++?

本文关键字:布文件 文件 蚊子 c++      更新时间:2023-10-16

我使用蚊子到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);
}

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

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

大致:

发布文件

  1. 读取文件到内存缓冲区
  2. 传递它,它的长度发布(…)

读取文件

http://courses.cs.vt.edu/cs2604/fall02/binio.html阅读

出版

从蚊子到文档中我不明白的是,您是否可以在发布缓冲区后立即销毁它,或者它是否需要挂起直到发送MQTT消息。

区分数据类型

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