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

时间:2014-07-10 14:13:07

标签: c++ linux file mqtt mosquitto

我使用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    
*/
}

1 个答案:

答案 0 :(得分:4)

概括地说:

发布文件

  1. 将文件读入内存缓冲区
  2. 传递它,以及发布(...)
  3. 的长度

    阅读文件

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

    出版

    我从mosquitto文档中了解的是,您是否可以在发布缓冲区之后立即销毁缓冲区,或者在发送MQTT消息之前是否需要暂停。

    区分数据类型

    在有效负载前面加上描述数据类型的标志。或者针对不同的数据类型使用不同的MQTT主题。如果失败了,根据您需要的空间效率,您可以将有效负载包装在protobuf,JSON或XML消息中。