0

我正在使用 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);
}

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

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

1 回答 1

4

宽广地:

发布文件

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

读取文件

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

出版

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

区分数据类型

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

于 2014-07-10T14:32:48.607 回答