在浏览器与服务器通信时,传统的 HTTP 请求在某些场景下并不理想,如实时监控、实时数据展示、分析等,其面临主要两个缺点:① 无法做到消息的实时性;② 服务端无法主动推送信息。为克服上述问题,基于HTTP 的主要解决思路有长连接和ajax 轮询。
基于ajax 的轮询:客户端定时或者动态相隔短时间内不断向服务端请求接口,询问服务端是否有新信息,该方案主要缺点是多余的空请求(浪费资源)且数据获取有延时。
Long Poll:其采用的是阻塞性的方案,客户端向服务端发起 ajax 请求,服务端挂起该请求不返回数据直到有新的数据,客户端接收到数据之后再次执行Long Poll。该方案中每个请求都挂起了服务器资源,在大量连接的场景下是不可接受的。
可以看到,被动性还是基于HTTP 协议的方案的本质缺陷,服务端无法下推消息,仅能由客户端发起请求不断询问是否有新的消息,同时客户端与服务端都存在性能消耗。
WebSocket 是HTML5 开始提供的一种浏览器与服务器间进行全双工通信的网络技术。WebSocket 通信协议于 2011 年被 IETF 定为标准 RFC 6455,WebSocketAPI 被W3C 定为标准。在WebSocket API 中,浏览器和服务器只需要做一个握手的动作,之后浏览器和服务器之间就形成了一条快速通道,两者之间就直接可以数据互相传送。WebSocket 的属性、事件和方法见表7-2~7-4,应用示例如图7-6 所示。
表7-2 WebSocket 的属性及其含义
(www.xing528.com)
表7-3 WebSocket 事件说明
表7-4 WebSocket 方法说明
图7-6 WebSocket 对象应用示例
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。