MQTT Part 11 基于WebSockets的MQTT

本文翻译自http://www.hivemq.com/blog/mqtt-essentials-special-mqtt-over-websockets

未经允许,不得转载

基于WebSockets的MQTT(MQTT over WebSockets)

我们已经学习了MQTT的基础内容,对于资源受限的设备和不可靠的网络环境来说,MQTT是个理想的通信协议。同时它产生的流量也很小。所以对于浏览器,手机或其他设备来说,用MQTT来收发数据也将是一个很好的选择。MQTT over WebSockets使这种构想成为可能。它使得浏览器可以利用MQTT的所有功能来服务于下列应用场景。

  • 显示设备或传感器的实时信息
  • 接受推送消息,例如一个警告或危险提示
  • 通过遗嘱和保留信息来查看设备当前状态
  • 通过手机或网页程序实现即时通信

从技术角度来看这意味着什么?

每个支持WebSockets的现代浏览器都可以成为一个完美的MQTT客户端,其可以实现我们之前提到的所有功能。例如心跳、遗嘱、QoS和保留消息都和原生MQTT一样工作。我们只需要一个支持MQTT over WebSockets的JavaScript库。我们还需要一个支持MQTT over WebSockets的broker。当然了,HiveMQ支持这些功能。

它如何工作?

WebSocket是一个支持浏览器和服务器双向通信的网络协议。它于2011年定型并且所有的现代浏览器都支持WebSockets。和MQTT相似,WebSockets也是基于TCP的。

MQTT Part 11 基于WebSockets的MQTT

当使用术语MQTT over WebSockets时,其代表着在网络传输时,一个MQTT消息,如CONNECT或PUBLISH消息被封装在一个或多个WebSocket数据帧中。之所以WebSockets适用于承载MQTT,是因为其通讯是双向的、有序的和无损的(这本质上是由于WebSockets也基于TCP)。为了通过WebSockets和MQTT的broker通信,broker必须支持原生的WebSockets。一些人也通过web服务来桥接WebSockets和MQTT,但是我们不推荐这样做。HiveMQ原生支持此功能,更多信息可以参见使用HiveMQ实现基于WebSockets的MQTT。

为什么不直接使用MQTT?

现在浏览器还不支持直接用MQTT,主要是因为浏览器不支持最基本的TCP连接。以后这个会通过Socket API来实现,但目前只有极个别的浏览器支持此API。

开始使用

如果你想开始使用MQTT over WebSockets,这有几个较好的资源供你参考:

  • 我们有一个MQTT WebSocket客户端,可以用来测试和调试使用。它默认使用的是一个公用的MQTT broker平台。此客户端的所有功能文档在此博客。源码可在GitHub上查到。
  • 我们还有另一个博客介绍了如何一步步建立自己的MQTT WebSockets客户端。如果你想整合MQTT到你现有的web应用,这是一个比较好的方案。
  • 如果你想安装自己的支持WebSockets的broker,请参见此处。

安全WebSockets

WebSockets支持TLS加密,HiveMQ也可以实现此功能,使用时候有一些需要注意的地方,我们已在用户手册中指明。