MQTT 和 Web Sockets 之间的主要区别是什么?
将 IoT 用于家庭自动化时 - 控制和监视对不同设备的访问,当需要基于 Rest API 和基于浏览器的可访问性时,应使用其中之一。
我在 Raspberry Pi 2 B+ 上使用 Java(Pi4J 库)。
我设置了几个传感器,如明暗、湿度、PID 等。
我还有一个云服务器,如果需要,我可以在那里发送数据。
MQTT 和 Web Sockets 之间的主要区别是什么?
将 IoT 用于家庭自动化时 - 控制和监视对不同设备的访问,当需要基于 Rest API 和基于浏览器的可访问性时,应使用其中之一。
我在 Raspberry Pi 2 B+ 上使用 Java(Pi4J 库)。
我设置了几个传感器,如明暗、湿度、PID 等。
我还有一个云服务器,如果需要,我可以在那里发送数据。
这里的问题设置有点误导,因为实际上这些协议根本无法比较。它们就像 TCP 和 IP 一样,层层叠叠。[1]
Websockets 是一种低级协议,用于提供其在同一级别的“竞争对手”RESTful http 不提供的内容:始终打开的通道,无需在每个请求上打开和关闭。[2]
MQTT 提供了一种轻量级的方式来发布或订阅数据。混淆可能是那些订阅是某种频道,但这是不同类型的频道。要在 MQTT 中建立持续打开的连接,您需要同时使用 Websockets 和 MQTT。
在 IoT 中,以及在任何设计中,您必须选择是否需要流(WebSockets 与 RESTful)以及关于 MQTT,您可能需要考虑是否需要在您的应用程序上使用订阅和发布机制。
在某些情况下,您可能会考虑通过 WebSockets 使用 MQTT,如果有任何共同之处的话。[3]
回答问题:
你说你在这个地方设置了一个树莓派和几个传感器。如果传感器远离拥有自己控制器的 Rasperry,您可以使用 MQTT 来收集数据。要将数据存储到云端,请使用 HTTP 发送数据。在云中通过休息提供数据。[4]
对于 websockets 没有必要,但如果您觉得它有用,请使用它。
资料来源:
[2] https://www.pubnub.com/blog/2015-01-05-websockets-vs-rest-api-understanding-the-difference/
[3] https://stackoverflow.com/questions/30624897/direct-mqtt-vs-mqtt-over-websocket
[4] http://www.theinternetofthings.eu/antonio-grasso-mqtt-vs-http-what-best-protocol-iot
它们的可比性在于两者都允许您进行全双工通信,以便服务器可以立即将数据传递给客户端,而无需客户端对其进行轮询(就像 HTTP 一样)。
然而,Websockets 是为客户端和服务器之间的简单点对点连接而设计的。MQTT 在基本消息发送之上分层了额外的抽象,以便多个感兴趣的方可以订阅他们可能感兴趣的消息。因此,消息可以通过“消息主题”进行路由,以便许多客户端可以共享一个名义队列,服务器可以选择在其中听取来自所有客户端的所有消息,但也可以按主题进行过滤。
MQTT 具有多种其他有用的功能,例如保留消息,以便订阅者立即收到消息,以及 LWT(最后遗嘱和遗嘱),这是一种在客户端异常断开连接时可以自动发送的消息。总而言之,MQTT 是“堆栈的上层”,提供了简单 Websocket 所没有的特性和抽象。