“WebSocket 是一项先进的技术,它能够在用户的浏览器和服务器之间打开交互式通讯会话。经过 WebSocket,您能够向服务器发送消息并实时接收响应,而无需经过传统的轮询服务器的方式来获取服务器上的响应。”html
这是一段 Mozilla 在开发人员文档页面上对于 WebSocket 的介绍。简单的来讲,WebSocket 可使浏览器在一段时间内保持与服务器的链接,它实现了浏览器与服务器全双工(full-duplex)通讯,即容许服务器主动发送信息给客户端。对于例如动态更新位置数据、拉取热点新闻、在浏览器中构建高性能游戏以及收集更多点击流数据等等须要保持实时数据交换的场景,这个特性就特别地友好。浏览器
相信你们都有遇到过这样的场景,服务器上有些资源常常会进行更新,客户端须要尽可能及时的获取到这些更新,在传统的 HTTP 协议中,若是客户端不发起一个 Request 请求,那么服务器是没有办法向客户端主动发起数据的。那么咱们是如何解决客户端和服务器之间的数据更新问题的呢?服务器
比较常见的作法就是 AJAX 轮询 。客户端设置一个定时器,在必定时间内客户端会向服务器发起一个 AJAX 请求,询问服务器是否有更新,若是有更新就及时返回数据。经过定时器,客户端能够反复的去轮询服务器上相关的资源有没有更新,从而实现近乎“实时”的通信。网络
AJAX 轮询虽然缩短了客户端和服务器之间数据同步的延迟时间,但同时也带来了一些性能消耗的问题。例如,若是客户端较多,那么服务器同时接收轮询请求就会增多,这就会对服务器形成巨大的压力,轮询所产生的流量,也会对网络形成必定的消耗,另外服务器资源更新频率较为频繁,但客户端定时器时间间隔较大,或者服务器长时间没有更新资源,这就会致使资源更新不及时、带宽耗费等等问题。性能
但有了 WebSocket 以后就不一样了,在 WebSocket API 中,浏览器和服务器只须要完成一次握手,二者之间就直接能够建立持久性的链接,并进行双向数据传输。这样,即便没有来自客户端的明确请求,服务器也能够向客户端发送信息,实现反向的通信。这就是服务器与客户端之间的“全双工”通讯。优化
点击此处能够体验一下 WebSocket 的魅力。spa
客户端(或多个客户端)先经过向服务器发送 HTTP 请求开始,请求中包括了 WebSocket 支持的版本号、协议的版本号、原始地址、主机地址等等一些字段给服务器端,向服务器代表客户端正在尝试创建 WebSocket 链接。htm
若是服务器检查数据包数据和格式正确,客户端和服务器端的协议版本号匹配,就接受本次握手链接,并给出相应的数据回复,一样回复的数据包也是采用 HTTP 协议传输。等待客户端确认后,就将初始 HTTP 链接升级为 WebSocket 链接,而且为每一个客户端维护该链接,从而实现双向通信。blog
比起传统的轮询方式,WebSocket 能够更好的节省服务器资源和带宽,而且可以进行更加实时地通信,优点以下:接口
WebSocket 有这么多优点,那么它适用于哪些场景呢?下面来简单了解下:
目前又拍云已经能够支持 WebSocket 无缝接入,依托于又拍云 CDN 1100+ 全球节点,10Tbps 带宽储备,国内主流运营商支持,经过 TCP 协议优化、链路优化、内容优化、智能调度等技术手段,大大提高加速性能。全自助化配置管理,配置策略全网 10 秒内生效;提供全方位的 API 接口,支持多样化管理,只需简单的配置,就能够迅速接入,享受全站加速。