何时使用物联网发布/订阅协议而不是RESTful HTTP?

6
我每分钟用HTTP POST请求将Arduino发送的数据(GPS坐标)发送到REST API(在OpenShift PaaS中)。然后将数据存储到MySQL数据库中。
所谓的“物联网”发布/订阅协议(XMPP,MQTT)是否更好?为什么?
何时使用这两个协议而不是Restful HTTP?我真的可以通过使用它们来节省大量电池能量吗?
据我所知,在这些协议中,设备会向代理发布数据,我的应用程序会订阅它。如果我想要在我的应用程序中每分钟收集一次数据,我想我必须有一些CRON作业,每分钟订阅一次数据?或者如何实现数据收集?
1个回答

4
所谓的"物联网"发布/订阅协议(XMPP,MQTT)是否更好?为什么?
在小规模(不多的传感器)或当传感器有足够的电力(CPU和电气)或通信成本较低时,使用MQTT的理由较少。相反,在大规模、CPU/电力受限的传感器或通信成本高时,MQTT或类似的物联网协议具有优势。您可以在非常简单的嵌入式CPU中实现MQTT,而HTTP则更加复杂。
何时使用这两个协议而不是Restful HTTP?我真的会因使用它们而节省大量电池能量吗?
例如,使用MQTT而不是3G,您将节省电池电源,因为从MQTT客户端到代理程序发布MQTT数据所产生的协议开销要少于每个REST POST所需的协议开销,后者通常需要建立SSL连接、使用冗长的HTTP发布数据,然后删除SSL连接。
MQTT连接本质上是双向的(尽管您的应用程序不一定要使用它),因此您本地获得向传感器发送命令的能力。如果要使用REST/HTTP进行同样操作,则必须对服务器进行长轮询配置。
这里有一个长轮询HTTPS与MQTT over SSL的比较http://stephendnicholas.com/posts/power-profiling-mqtt-vs-https,显示MQTT与慢轮询HTTPS相比每天节省约4.1%的电池功率。因此,您可以节省大量电池能量。
使用MQTT,您可以发送非常小的消息,例如几个字节的二进制数据,并且开销很低。使用REST/HTTP,数据会被包装在很多带有更高开销的HTTP协议中。如果您有大量设备,这些开销字节将增加发送的数据量,这将花费金钱。因此,在大规模使用像MQTT这样的紧凑协议并仔细设计数据传输可以节省您的成本。
以每分钟收集数据。
使用MQTT,您的应用程序通常对主题进行持久订阅并自动收到更新通知。如果您想要每分钟的摘要,您的应用程序将保存更新到DB并从DB中报告。通常需要使用数据库来存储所有数据。您可以订阅通配符主题-这意味着您设计了主题,因此您的应用程序订阅了所有太阳能传感器,代理程序将发送所有连接的设备的数据,而不必轮询各个传感器。

谢谢你的回答,它提供了许多见解。然而,据我所知,如果您想使用MQTT,则必须拥有连续的TCP连接。现在,仅仅为了每分钟甚至更少频繁地发送一个小的JSON数据,这并不是一个好主意(我有一个功能,可以将发送周期设置为15分钟)。 - Gregor Stopar
虽然我使用普通的HTTP,但我发送的数据已经进行了哈希处理,因此我认为不需要SSL。 - Gregor Stopar
一个持久的TCP连接消耗非常小的开销。是的,您可能能够做出设计或过程决策,例如延长延迟,像拥有大量CPU /电力,像不必处理大量传感器,像没有时间学习新知识等,这意味着您可以使用HTTP / REST。没有人强制您使用MQTT,主要观点是您应该做出明智的选择,而不是仅仅假定您所了解和习惯的是解决物联网问题的最佳/唯一方法。 - DisappointedByUnaccountableMod
没错,这也是我问这个问题的原因,为了获得更全面的视角。干杯! - Gregor Stopar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接