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

当使用IoT进行家庭自动化时-控制和监视对不同设备的访问,当基于Rest API和基于浏览器的可访问性是时,应使用其中之一?

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

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

评论

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

#1 楼

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

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

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

在IoT以及任何设计中,都必须选择是否需要流(WebSocket与RESTful)以及关于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-Things

[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

评论


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

–Aurora0001♦
17年5月18日在16:48

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

– Shakti Phartiyal
17年5月18日在17:23

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

–金锁
17年5月18日在17:56



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

–约翰
18-2-10在10:35



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

–mico
18-2-10在14:22

#2 楼

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

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

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