MQTT和WebSocket

严格来讲,MQTT跟WebSocket关系不大。他们不是在一个层级的。html

 

MQTT和TCP、WebSocket的关系能够用下图一目了然:web

fd8bfc1a045c026261782533cc48529e

 

参考资料:spring

http://www.zhihu.com/question/21816631编程

 

WebSocket的优点

之前,不少网站使用轮询实现推送技术。轮询是在特定的的时间间隔(好比1秒),由浏览器对服务器发出HTTP request,而后由服务器返回最新的数据给浏览器。轮询的缺点很明显,浏览器须要不断的向服务器发出请求,然而HTTP请求的header是很是长的,而实际传输的数据可能很小,这就形成了带宽和服务器资源的浪费。 segmentfault

Comet使用了AJAX改进了轮询,能够实现双向通讯。可是Comet依然须要发出请求,并且在Comet中,广泛采用了长连接,这也会大量消耗服务器带宽和资源。 浏览器

因而,WebSocket协议应运而生。 浏览器经过 JavaScript 向服务器发出创建 WebSocket 链接的请求,链接创建之后,客户端和服务器经过 TCP 链接直接交换数据。WebSocket 链接本质上是一个 TCP 链接。 服务器

WebSocket在数据传输的稳定性和数据传输量的大小方面,具备很大的性能优点。Websocket.org 比较了轮询和WebSocket的性能优点:websocket

HTTP 轮训每次须要返回871个字节,websocket每次只须要2个字节网络

Use Case A: 1,000个客户端每秒接受一个message,网络吞吐量 (2*1,000)=2,000 bytes = 16,000 每秒bits 架构

Use Case B: 10,000个客户端每秒接受一个message,网络吞吐量 (2*10,000)=20,000 bytes = 160,000 每秒bits

Use Case C: 100,000个客户端每秒接受一个message,网络吞吐量 (2*100,000)=200,000 bytes = 1,600,000 每秒bits

poll-ws-compare

参考:

http://segmentfault.com/a/1190000000382788

Spring 4.0 中的 WebSocket 架构
http://www.oschina.net/translate/websocket-architecture-in-spring-4-0

MQTT

 

MQTT 协议是为大量计算能力有限,且工做在低带宽、不可靠的网络的远程传感器和控制设备通信而设计的协议,它具备如下主要的几项特性:

  • 很是小的通讯开销(最小的消息大小为 2 字节),小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以下降网络流量。
  • 支持各类流行编程语言(包括 C,Java,Ruby,Python 等等)且易于使用的客户端;
  • 使用发布 / 订阅消息模式,提供一对多的消息发布,解除应用程序耦合。
  • 对负载内容屏蔽的消息传输。
  • 使用 TCP/IP 提供网络链接。
  • 有三种消息发布服务质量,让消息能按需到达目的地,适应在不稳定工做的网络传输需求 :
    • "至多一次",消息发布彻底依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于以下状况,环境传感器数据,丢失一次读记录无所谓,由于不久后还会有第二次发送。
    • "至少一次",确保消息到达,但消息重复可能会发生。
    • "只有一次",确保消息到达一次。这一级别可用于以下状况,在计费系统中,消息重复或丢失会致使不正确的结果。
  • 使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制。

 

参考:

MQTT技术:为物联网而生
http://www.leiphone.com/0828-danice-mqtt.html

 

MQTT 折腾笔记----协议简读
http://www.cnblogs.com/youxilua/archive/2013/04/25/3041528.html

 

 

基于 WebSocket 的 MQTT 移动推送方案
http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1308_xiangr_mqtt/1308_xiangr_mqtt.html

相关文章
相关标签/搜索