如何用Qt5.9接收EMQ代理服务器传过来的话题消息(已经订阅的)(C++语言)

本文主要总结基于QMQTT协议客户端接,如何收来自EMQ代理服务器发送过来的信息(已经订阅的),具体的操作如下所示:
想要接收来自EMQ代理服务器传输过来的话题消息(已经订阅的),可以直接用下列关联语句就行。
1.1在Qt5.9中新建一个widget工程,并且写好跟EMQ代理服务器连接函数。根EMD代理服务器连接成功后,则可以直接调用发布函数QMQTT::Message msg(0, "topic", "payload", 2);client->publish(msg)和订阅函数client->subscribe("topic",2);。

1.2然后在工程的MainWindow类的构造函数中,添加如下代码:

client=newQMQTT::Client();//初始化QMQTT客户端指针

connect(client,SIGNAL(received(constQMQTT::Message&)),this,SLOT(onMQTT_Received(constQMQTT::Message&)));

    connect(client,SIGNAL(subscribed(constQString&)),this,SLOT(onMQTT_subscribed(constQString&)));


1.3在工程的MainWindow.h头文件添加如下代码

QMQTT::Client*client;//创建QMQTT客户端指针

voidonMQTT_Received(constQMQTT::Message&message);

void onMQTT_subscribed( const QString&topic);


1.4在mainwindow.cpp源文件添加如下代码

voidMainWindow::onMQTT_Received(constQMQTT::Message&message)

{

    QStringstrPaylaod=message.payload();

    QMessageBox::warning(this,"payload",strPaylaod,QMessageBox::Yes,QMessageBox::No);

}

 

voidMainWindow::onMQTT_subscribed(constQString&topic)

{

     QMessageBox::warning(this,"payload",topic,QMessageBox::Yes,QMessageBox::No);

}


二、接收EMQ代理服务器话题消息原理和应用详解
2.1 onMQTT_Received(const QMQTT::Message &message)函数应用详解
当发布客户端发送一个话题时(客户端已经订阅的话题),则该话题会直接发送到EMQ代理服务器中,EMQ代理服务器自动转发到所有订阅了这个话题的订阅客户端。这时,订阅了这个话题的客户端会自动触发函数onMQTT_Received(const QMQTT::Message &message),其中message类对象中存储了订阅的话题信息,包括topic和paylaod,QoS等信息。这时,只要用message.topic和message.paylaod就可以直接对内容进行处理操作,比如显示到UI窗口等。
如下图所示:
 
图1  发布客户端


 
图2  接收客户端
当一点击发布客户端发布话题topic的【publish】按钮时,发布客户端自动向EMQ代理服务器发送话题topic为:/Weather/123,有效内容payload为:abcd。
EMQ代理服务器自动转发该话题信息,给所有订阅了/Weather/123话题的客户端。此时订阅了/Weather/123话题的客户端,自动触发函数onMQTT_Received接收EMQ代理服务器发送过来的信息,并且存储在message类对象中。我将message类对象中的message.topic和message.payload信息用弹出框弹出,结果如图2所示。


2.2 MainWindow::onMQTT_subscribed(const QString &topic)函数应用详解
订阅客户端订阅一个话题,当该话题订阅成功后,则自动触发该函数onMQTT_subscribed,否则不触发。触发成功后,则将客户端订阅成功的话题信息存储在topic变量中。
 
图3  自动触发订阅成功话题
如图3所示,当连接正常时,点击一个订阅客户端的【subscribe】按钮,订阅成功后,则自动触发onMQTT_subscribed函数,并且将订阅成功的话题存储在topic变量中。我将该话题topic用图3显示出来。 参考内容: https://github.com/emqtt/qmqtt-client https://stackoverflow.com/questions/43349145/qt-qmqtt-client-library-does-not-work-with-windows/46906890