1.WebSocket是一种计算机通信协议,通过单个 TCP/IP 连接提供全双工通信通道。它与http密切相关,因为它使用http进行初始连接建立。客户端和服务器使用 http 连接,然后协商连接升级到 websockets,然后连接从 http切换到 websockets。客户端和服务器现在可以通过连接交换全双工二进制数据。
2.MQTT本省和WebSocket没有什么关系,但是Broker可以处理WebSocket里的MQTT包。
- mqtt over websocket:使用WebSocket建立连接,然后在WebSocket通道上,使用MQTT协议进行通信,即MQTT over WebSocket。
- 在MQTT over Websockets的情况下,websockets 连接形成了 MQTT 协议的外部管道。MQTT 代理将 MQTT 数据包放入 websockets 数据包中,并将其发送给客户端。客户端从 websockets 包中解压 MQTT 包,然后将其作为普通 MQTT 包进行处理。
- 在MQTT over WebSockets 中,MQTT 消息(例如,CONNECT 或 PUBLISH 数据包)通过网络传输并由一个或多个 WebSocket 帧封装。WebSockets 是 MQTT 的一种很好的传输方法,因为它们提供双向、有序和无损的通信(WebSockets 也利用 TCP)。要通过 WebSocket 与 MQTT 代理通信,代理必须能够处理本机 WebSocket。有时,人们使用网络服务器并将 WebSockets 桥接到 MQTT 代理,但我们不推荐这种方法。
- MQTT over WebSocket是把MQTT control message 包装成WebSocket包,通过WebSocket 管道发送。即使用WebSocket来支持MQTT Client和Broker的连接。
- mqtt over websocket的思路,是想既利用mqtt的诸多优良特点,同时又可以对防火墙友好,不需要找IT开1883/8883端口。
- 从部署成本的角度来说,在很多正规的客户企业现场部署物联网客户端的的时候,如果是mqtt/ mqtts,就要找客户IT管理员在防火墙开1883和8883端口。用websocket,就不需要找IT。
- MQTT 跟 Websocket 可以认为是不同层面的协议。MQTT 做原生设备的通信,MQTT over WebSocket 主要用于 MQTT 设备跟 Web 端通信。
3.mqtt和mqtt over websocket两者的应用场景不一样:MQTT是为了物联网场景设计的基于TCP的Pub/Sub协议,有许多为物联网优化的特性,比如适应不同网络的QoS、层级主题、遗言等等。WebSocket是为了HTML5应用方便与服务器双向通讯而设计的协议,HTTP握手然后转TCP协议,用于取代之前的Server Push、Comet、长轮询等老旧实现。两者之所有有交集,是因为一个应用场景:如何通过HTML5应用来作为MQTT的客户端,以便接受设备消息或者向设备发送信息,那么MQTT over WebSocket自然成了最合理的途径了。
4.在 Websockets 上使用 MQTT 的两个主要原因(这实际上意味着通过 HTTP/HTTPS。直接使用mqtt更有效率,有更多适用于“直接”MQTT 的各种语言的客户端库):
- Web 应用程序(在浏览器中运行的应用程序 - 例如用 JavaScript 编写的应用程序)
- 任何其他不想使用 1883/8883 端口并希望通过 HTTP/HTTPS 的应用程序 - 这可能是为了减少被防火墙阻止的机会(例如在公司网络中),因为大多数防火墙会让 HTTP 流量通过
5.MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是轻量级基于代理的发布/订阅的消息传输协议,设计思想是开放、简单、轻量、易于实现。这些特点使它适用于受限环境。例如:
①网络代价昂贵,带宽低、不可靠。
②在嵌入设备中运行,处理器和内存资源有限。
该协议的特点有:
①使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。
②对负载内容屏蔽的消息传输。
③使用 TCP/IP 提供网络连接。
④有三种消息发布服务质量:
⑤"至多一次",消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
⑥"至少一次",确保消息到达,但消息重复可能会发生。
⑦"只有一次",确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
⑧小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量。
⑨使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制。
6.WebSocket则提供使用一个TCP连接进行双向通讯的机制,包括网络协议和API,以取代网页和服务器采用HTTP轮询进行双向通讯的机制。
本质上来说,WebSocket是不限于HTTP协议的,但是由于现存大量的HTTP基础设施,代理,过滤,身份认证等等,WebSocket借用HTTP和HTTPS的端口。由于使用HTTP的端口,因此TCP连接建立后的握手消息是基于HTTP的,由服务器判断这是一个HTTP协议,还是WebSocket协议。 WebSocket连接除了建立和关闭时的握手,数据传输和HTTP没丁点关系了。
由此可知两者的应用场景不一样:
MQTT是为了物联网场景设计的基于TCP的Pub/Sub协议,有许多为物联网优化的特性,比如适应不同网络的QoS、层级主题、遗言等等。
WebSocket是为了HTML5应用方便与服务器双向通讯而设计的协议,HTTP握手然后转TCP协议,用于取代之前的Server Push、Comet、长轮询等老旧实现。
两者之所有有交集,是因为一个应用场景:如何通过HTML5应用来作为MQTT的客户端,以便接受设备消息或者向设备发送信息,那么MQTT over WebSocket自然成了最合理的途径了。
7.MQTT协议专注于网络、资源受限环境,建立之初不曾考虑WEB环境。HTML5 Websocket是建立在TCP基础上的双通道通信,和TCP通信方式很类似,适用于WEB浏览器环境。虽然MQTT基因层面选择了TCP作为通信通道,但我们添加个编解码方式,MQTT over Websocket也可以的。这样做的好处,MQTT的使用范畴被扩展到HTML5、桌面端浏览器、移动端WebApp、Hybrid等,多了一些想像空间。这样看来,无论是移动端,还是WEB端,MQTT都会有自己的使用空间。