Why/when 使用 IoT publish/subscribe 协议而不是 RESTful HTTP?

Why/when to use IoT publish/subscribe protocols rather then RESTful HTTP?

我每分钟使用 HTTP POST 请求从 Arduino 发送数据(GPS 坐标)到 REST API(在 OpenShift PaaS 中)。然后将数据存储到 MySQL db.

所谓的 "IoT" publish/subscribe 协议(XMPP、MQTT)会更好吗?为什么?

您具体什么时候使用这两种协议而不是 Restful HTTP?使用它们真的可以节省大量电池能量吗?

那些协议机器中的 AFAIK 会 "publish" 一个数据给代理,我的应用程序会订阅它。如果我想在我的应用程序中每分钟收集一次数据,我想我必须有一些 CRON 作业来每分钟订阅一次数据?或者如何收集数据?

Would so called "IoT" publish/subscribe protocols (XMPP, MQTT) be better? Why?

在小规模(传感器不多)或传感器有足够的功率(CPU 和电力)或通信成本低的情况下,使用 MQTT 的理由较少。相反,在大规模情况下,或者对于 CPU/electricity-limited 个传感器,或者当通信成本很高时,MQTT 或类似的物联网协议具有优势。您可以在非常简单的嵌入式中实现 MQTT CPU,实现 HTTP 更复杂。

When exactly do you use those two protocols rather than Restful HTTP? Would I really save a significant baterry energy using them?

您可以使用例如电池来节省电池电量。例如 MQTT 3G 因为通过从 MQTT 客户端到代理的持久 TCP 连接发布 MQTT 数据的协议开销较少,所以每个 REST POST 通常需要建立 SSL 连接,使用详细的 HTTP 发布数据,然后删除SSL 连接。

MQTT 连接本质上是双向的(尽管您的应用程序不必使用它)- 因此您本机就可以向传感器发送命令。要使用 REST/HTTP 执行相同操作,您必须将服务器配置为长轮询。

此处比较了长轮询 HTTPS 与基于 SSL 的 MQTT http://stephendnicholas.com/posts/power-profiling-mqtt-vs-https,显示与慢速轮询 HTTPS 相比,使用 MQTT 节省了约 4.1% 的电量 power/day 所以是的,您可以节省大量电池能量。

使用 MQTT,您可以发送非常小的消息,例如几个字节的二进制数据,开销很小。使用 REST/HTTP,数据被包装在大量 HTTP 协议中,开销更高。如果你有很多设备,这些开销字节加起来会发送更多的数据,这会花钱。因此,大规模使用像 MQTT 这样的紧凑型协议并仔细设计数据传输可以节省您的钱。

gather data every minute

使用 MQTT,您的应用程序通常会持续订阅主题并自动收到更新通知。如果您希望每分钟都有一个摘要,您的应用程序会将更新保存到例如数据库和来自数据库的报告。无论如何,通常需要数据库来存储所有数据。您可以订阅通配符主题 - 这意味着您设计主题以便您的应用订阅例如所有太阳能传感器和代理将为所有连接的设备发送数据,而您的应用程序无需轮询各个传感器。