Answers:
这里的问题设置有点让人误解,因为实际上这些协议根本无法一起比较。它们就像TCP和IP,位于彼此之上。[1]
Websockets是一种低级协议,用于提供其“竞争者” RESTful HTTP在同一级别上不提供的功能:始终打开的通道,无需打开和关闭每个请求。[2]
MQTT提供了一种轻量级的方式来发布或订阅数据。困惑可能是那些订阅是某种类型的频道,但是那是不同类型的频道。要在MQTT中建立恒定的开放连接,您需要同时使用Websocket和MQTT。
在物联网以及任何设计中,都必须选择是否需要流(WebSocket与RESTful),关于MQTT,您可能必须考虑是否要在应用程序上使用订阅和发布机制。
在某些情况下,如果有任何常见的事情,您可以考虑通过WebSockets进行MQTT。[3]
回答问题:
您说您有一个Rasperry Pi的安装和周围的几个传感器。如果传感器和Rasperry控制器本身距离较远,则可以使用MQTT收集数据。要将数据存储到云,请使用HTTP发送数据。在云中通过休息提供数据。[4]
对于websocket,没有必要,但是如果发现有用,请使用它。
资料来源:
[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
它们具有可比性,因为两者都允许您进行全双工通信,以便服务器可以立即将数据传递给客户端,而无需客户端轮询它(例如HTTP)。
但是,Websockets设计用于在客户端和服务器之间进行简单的点对点连接。MQTT在基本消息发送的基础上增加了额外的抽象,以便多个相关方可以订阅可能使他们感兴趣的消息。因此,可以通过“邮件主题”路由邮件,以便许多客户端可以共享一个名义上的队列,服务器可以在该队列中选择侦听来自所有客户端的所有邮件,但也可以按主题进行过滤。
MQTT具有各种其他有用的功能,例如保留的消息(使订户立即接收到该消息)以及LWT(最后的遗嘱),该消息是在客户端异常断开连接时可以自动发送的消息。总之,MQTT是“更高层的”,提供了简单Websocket所没有的功能和抽象。