MQTT和Web套接字之间有什么区别,什么时候应该使用它们?


17

MQTT和Web套接字之间的主要区别是什么?

将物联网用于家庭自动化时-控制和监视对不同设备的访问,当需要基于Rest API和基于浏览器的可访问性时,应使用其中之一。

我在Raspberry Pi 2 B +上使用Java(Pi4J库)。

我有几个传感器的设置,例如明暗,湿度,PID等。

我也有一个云服务器,可以根据需要在其中发送数据。


1
您可以通过明确定义当前和将来的所有需求来决定使用哪个。然后,您将生成一个交叉矩阵,显示哪种技术最能满足您的要求。然后,您选择使用一种或多种技术来满足您的要求。

Answers:


23

这里的问题设置有点让人误解,因为实际上这些协议根本无法一起比较。它们就像TCP和IP,位于彼此之上。[1]

Websockets是一种低级协议,用于提供其“竞争者” RESTful HTTP在同一级别上不提供的功能:始终打开的通道,无需打开和关闭每个请求。[2]

MQTT提供了一种轻量级的方式来发布或订阅数据。困惑可能是那些订阅是某种类型的频道,但是那是不同类型的频道。要在MQTT中建立恒定的开放连接,您需要同时使用Websocket和MQTT。

在物联网以及任何设计中,都必须选择是否需要流(WebSocket与RESTful),关于MQTT,您可能必须考虑是否要在应用程序上使用订阅和发布机制。

在某些情况下,如果有任何常见的事情,您可以考虑通过WebSockets进行MQTT。[3]

回答问题:

您说您有一个Rasperry Pi的安装和周围的几个传感器。如果传感器和Rasperry控制器本身距离较远,则可以使用MQTT收集数据。要将数据存储到云,请使用HTTP发送数据。在云中通过休息提供数据。[4]

对于websocket,没有必要,但是如果发现有用,请使用它。

资料来源:

[1] https://www.quora.com/What-are-the-pros-and-cons-of-WebSockets-versus-MQTT-as-real-time-web-infrastructure-for-the-Internet-of -东西

[2] https://www.pubnub.com/blog/2015-01-05-websockets-vs-rest-api-understanding-the-difference/

[3] /programming/30624897/direct-mqtt-vs-mqtt-over-websocket

[4] http://www.theinternetofthings.eu/antonio-grasso-mqtt-vs-http-what-best-protocol-iot


3
与您的最后一点也有关:Mosquitto MQTT经纪人的开发人员Roger Light的答案将使用MQTT的原始套接字到Web套接字的用例进行了比较。
Aurora0001

谢谢mico,这是一个很好的解释。但我仍然不清楚该使用什么。
Shakti Phartiyal

3
很好的答案,但是:使用“打开和关闭” WRT WS://与HTTP://可能会产生误导;首先,可以对HTTP 1.1请求进行管道传输,因此在文字套接字级别上,一个连接可以包含无限数量的请求,而无需在这种意义上打开和关闭。最好说websockets的优点是不需要承诺同步的“请求和响应”周期。您拥有一个开放的双向渠道,并具有最少的交换规则集。
goldilocks

“要在MQTT中建立恒定的开放连接,您需要同时使用Websockets和MQTT。” 您确定吗?请解释为什么如果客户端可以继续将PINGRESP数据包继续发布回服务器,那么MQTT为什么必须使用webSockets来保持“恒定的开放连接”?实现MQTT的客户端将发送PINGRESP数据包以保持连接有效,而隐含的webSocket的客户端将使用keepAlive()向服务器发送空数据包webSocket.send('')来保持连接有效。
约翰,

嗯。您可以使用该数据包保持连接状态。我发现那里的MQTT通过TCP / IP(不是HTTP)工作。在这种情况下,您可以保持连接打开。
mico

9

它们具有可比性,因为两者都允许您进行全双工通信,以便服务器可以立即将数据传递给客户端,而无需客户端轮询它(例如HTTP)。

但是,Websockets设计用于在客户端和服务器之间进行简单的点对点连接。MQTT在基本消息发送的基础上增加了额外的抽象,以便多个相关方可以订阅可能使他们感兴趣的消息。因此,可以通过“邮件主题”路由邮件,以便许多客户端可以共享一个名义上的队列,服务器可以在该队列中选择侦听来自所有客户端的所有邮件,但也可以按主题进行过滤。

MQTT具有各种其他有用的功能,例如保留的消息(使订户立即接收到该消息)以及LWT(最后的遗嘱),该消息是在客户端异常断开连接时可以自动发送的消息。总之,MQTT是“更高层的”,提供了简单Websocket所没有的功能和抽象。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.