物联网:我需要使用MQTT还是HTTP?

zep*_*rax 7 http mqtt iot

我正在研究一种能够感知和收集环境信息的设备,如温度,湿度等.

该设备没有连接任何电源,但它有一个电池和一个太阳能电池板来充电.

它大多数时间几乎处于深度睡眠状态,只有在需要感知和传输数据时才会唤醒.此操作大约需要1-2分钟,然后再次进入睡眠状态.

我不是这方面的专家,但我认为MQTT应该是一个很好的选择,如果设备需要始终可以从主题接收消息,但在我的场景中它只读取传感器,并将数据发送到服务器定期.

目前我正在通过HTTP发送数据,但我想知道实现MQTT是否有意义?在这种情况下,我是否应该通过HTTP获得任何优势?

blp*_*blp 15

有关MQTT与HTTP的丰富文献,您应该深入研究细节,但这里有一些适合您应用的要点.

MQTT

  • MQTT允许持久连接,这可以通过HTTP节省大量资源.如果您使用SSL,这是最相关的.
  • 如果您只发送一些指标,MQTT通常比HTTP更具带宽效率.
  • 由于MQTT旨在提供数据(而不是整个页面),因此其发布/订阅模型提供了许多有用的内置功能,例如保留和最后的意愿.
  • MQTT还提供了一种实现加密,身份验证和访问控制的简单方法.
  • MQTT适用于连接可能间歇性或不可靠的情况.其各种服务质量级别为您提供了确保数据可靠发送的重要方法.
  • 在较大的应用程序中,MQTT代理可以根据我的经验提供更轻松的管理.我特别喜欢有一套标准化的度量标准来衡量绩效.
  • MQTT的主题/子主题值结构有助于组织数据,并且可以轻松扩展和在多个项目之间共享资源.
  • 这可能是个人偏好,但我发现MQTT协议比使用HTTP更容易理解,排除故障和编程.特别是,Python Paho MQTT库很简单,运行良好.

总之,MQTT具有许多功能,这些功能似乎非常适合您的应用程序.也就是说,您可能使用HTTP复制其中许多,但这需要更多的工作.

HTTP

  • 几乎支持所有地方,确保更容易与防火墙兼容.如果您在无法控制的网络上进行部署,这可能很重要.

  • 这是一种更常见的协议,因此您(以及您的最终用户)可能已经对此感到满意.同样,您可能已经了解了可以更容易保护的安全模型.

  • 不同的MQTT实现之间存在一些差异,这可能会导致困难(即我使用Mosquitto,当人们谈论他们的HiveMQ设置时有时会发现它令人困惑).HTTP让我感到更加普遍,并且有更多的人可以帮助您.

因此,与MQTT相比,HTTP具有一些固有的缺点,但如果MQTT的特定功能对您没有吸引力,它将完成工作并且可能更实用.

但实际上,如果这是一个大型项目,那么值得尝试并在您的特定应用程序和环境中运行一些基准测试和测试.设置测试环境并获得一些指标并不困难.如果这更像是一个爱好/一次性项目,那么我会使用你更舒服或更有趣的任何一个.

来源/进一步阅读:

http://stephendnicholas.com/posts/power-profiling-mqtt-vs-https https://www.ibm.com/developerworks/community/blogs/sowhatfordevs/entry/using_mqtt_protocol_advantages_over_http_in_mobile_application_development5?lang=en https:// medium. com/@ shubhanshusingh/http-vs-mqtt-9008d448bf88 https://www.slideshare.net/paolopat/mqtt-iot-protocols-comparison https://mobilebit.wordpress.com/2013/05/03/rest-is -for-sleeping-mqtt-is-for-mobile/ http://bec-systems.com/site/1200/iot-protocols-mqtt-vs-coap-vs-http


小智 5

我们已经从性能和能耗的角度测试了普通服务器和 Raspberry Pi 板上基于 SSL 的MQTT 与 HTTP(REST)。结果取决于正在运行进程的用例和设备。

关于您的用例,我们也有特殊测试 => 通过 HTTP、HTTP-batch 或 MQTT 传递许多消息(多个探测)。结果非常简单,如果您有可能在一个 HTTP 请求中发送数据 - 这将是最好的选择。MQTT 排在第二位,具有按消息传递的 HTTP 的能效要低得多,而且比 MQTT 慢得多。