引用:https://www.ibm.com/developerworks/cn/web/1112_huangxa_websocket/index.htmlhtml
做为下一代的 Web 标准,HTML5 拥有许多引人注目的新特性,如 Canvas、本地存储、多媒体编程接口、WebSocket 等等。这其中有“Web 的 TCP ”之称的 WebSocket 格外吸引开发人员的注意。WebSocket 的出现使得浏览器提供对 Socket 的支持成为可能,从而在浏览器和服务器之间提供了一个基于 TCP 链接的双向通道。Web 开发人员能够很是方便地使用websocket构建实时web应用,开发人员的手中今后又多了一柄神兵利器。前端
实时web 应用
普通web请求通信过程
web
1.问题:好比说在线游戏、在线证券、设备监控、新闻在线播报、RSS 订阅推送等等,当客户端浏览器准备呈现这些信息的时候,这些信息在服务器端可能已通过时了。
2.[之前的解决方案][3]
1)ajax轮询:前端设置一个定时器,每隔一段时间,给服务器发送一个请求,而后服务器给你返回,不停的问,服务器不停的回,最后的结果,服务器弱点的话,就是崩了!
2)long poll (长轮询):这个也是同一个机制,不过采起的是阻塞模型。客户端到服务器家借钱,服务器没有钱,说是去打工挣钱了,等挣到钱就给他,可是客户端不走,等到服务器把钱拿回来了再走,或者客户端等的时间太长了,已经超过它设定的等待时间,它就会结束此次借钱任务,而后过些时候,再过来看看,服务器是否是已经有钱了。若是说是,客户端不停的和服务器要钱,来一趟,拿走,再来一趟,拿走,那么这种方法和ajax轮询没有区别。术语:当服务器端没有数据更新的时候,链接会保持一段时间周期直到数据或状态改变或者时间过时,经过这种机制来减小无效的客户端和服务器间的交互ajax
简单的总结:(若错误请指出)
1.性能高:为何性能高呢,由于客户端只要一次请求,链接上了,就再也不请求,等待服务器主动给客户端数据:[情景以下][3]:
客户端:啦啦啦,我要创建Websocket协议,须要的服务:chat,Websocket协议版本:17(HTTP Request)
服务端:ok,确认,已升级为Websocket协议(HTTP Protocols Switched)
客户端:麻烦你有信息的时候推送给我噢。。
服务端:ok,有的时候会告诉你的。
服务端:有更新啦
服务端:又有更新啦
服务端:哈哈哈哈哈啊哈哈哈哈
服务端:笑死我了哈哈哈哈哈哈哈
那么为何他会解决服务器上消耗资源的问题呢?其实咱们所用的程序是要通过两层代理的,即HTTP协议在Nginx等服务器的解析下,而后再传送给相应的Handler(PHP等)来处理。简单地说,咱们有一个很是快速的接线员(Nginx),他负责把问题转交给相应的客服(Handler)。自己接线员基本上速度是足够的,可是每次都卡在客服(Handler)了,老有客服处理速度太慢。,致使客服不够。Websocket就解决了这样一个难题,创建后,能够直接跟接线员创建持久链接,有信息的时候客服想办法通知接线员,而后接线员在统一转交给客户。这样就能够解决客服处理速度过慢的问题了
[3]:https://www.zhihu.com/question/20215561
2.双向:服务器也能主动发送数据给客户端了,再也不是客户端踹一脚应一声的状态
3.兼容性:能兼容到ie10+,chrome4+,firefox4+,opera10+,Safari5+
4.能跨域(socket.io)chrome