//理论部分转载自:https://www.jianshu.com/p/95d259b05c67
谈到Web实时推送,就不得不说WebSocket。谈到Web实时推送,就不得不说WebSocket。Comet又可细分为两种实现方式,一种是长轮询机制,一种称为流技术,这两种方式实际上是对轮询技术的改进,这些方案带来很明显的缺点,需要由浏览器对服务器发出HTTP request,,大量消耗服务器带宽和资源。
面对这种状况,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽并实现真正意义上的实时推送。
WebSocket是HTML5出的东西(协议)
可以把 WebSocket 看成是 HTTP 协议为了支持长连接所打的一个大补丁,它和 HTTP 有一些共性,是为了解决 HTTP 本身无法解决的某些问题而做出的一个改良设计。WebSocket不是HTTP协议,HTTP只负责建立WebSocket连接。
WebSocket实战:
Web领域的实时推送技术,这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新。它有着广泛的应用场景,比如双人对战小游戏、在线聊天室、在线客服系统、评论系统、WebIM等。
在了解这个之前我先来科普一下:
了解背景: 在以前 HTTP 协议中所谓的 **keep-alive connection** 是: 指在一次 TCP 连接中完成多个 HTTP 请求,但是对每个请求仍然要单独发 header; 所谓的 polling : 是指从客户端(一般就是浏览器)不断主动的向服务器发 HTTP 请求查询是否有新数据 。 这两种模式有一个共同的缺点: 就是除了真正的数据部分外,服务器和客户端还要大量交换 HTTP header,信息交换效率很低。 它们建立的“长连接”都是伪.长连接. 只不过好处是不需要对现有的 HTTP server 和浏览器架构做修改就能实现。
http long poll,或者ajax轮询都可以实现实时信息传递
原理:让浏览器隔个几秒就发送一次请求,询问服务器是否有新信息。
从上面可以看出其实这两种方式,都是在不断地建立HTTP连接,然后等待服务端处理,可以体现HTTP协议的另外一个特点,被动性(服务端不能主动联系客户端,只能有客户端发起。)。
由此可以看出上面那种方式的缺陷:
非常消耗资源的:
ajax轮询 需要服务器有很快的处理速度和资源。(速度)
long poll 需要有很高的并发,也就是说同时接待客户的能力。(场地大小)
所以在这种情况下出现了,Websocket出现了。
它解决了HTTP的这几个难题:
非持久性
同步有延迟
消耗资源
无状态协议。
被动性
原文:https://www.cnblogs.com/lfri/p/11871400.html