严格来讲,MQTT跟WebSocket关系不大。他们不是在一个层级的。html
MQTT和TCP、WebSocket的关系能够用下图一目了然:web
参考资料:spring
http://www.zhihu.com/question/21816631编程
之前,不少网站使用轮询实现推送技术。轮询是在特定的的时间间隔(好比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
参考:
http://segmentfault.com/a/1190000000382788
Spring 4.0 中的 WebSocket 架构
http://www.oschina.net/translate/websocket-architecture-in-spring-4-0
MQTT 协议是为大量计算能力有限,且工做在低带宽、不可靠的网络的远程传感器和控制设备通信而设计的协议,它具备如下主要的几项特性:
参考:
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