说说 WebSocket,3 分钟让你全面认识它

“WebSocket 是一项先进的技术,它能够在用户的浏览器和服务器之间打开交互式通讯会话。经过 WebSocket,您能够向服务器发送消息并实时接收响应,而无需经过传统的轮询服务器的方式来获取服务器上的响应。”html

这是一段 Mozilla 在开发人员文档页面上对于 WebSocket 的介绍。简单的来讲,WebSocket 可使浏览器在一段时间内保持与服务器的链接,它实现了浏览器与服务器全双工(full-duplex)通讯,即容许服务器主动发送信息给客户端。对于例如动态更新位置数据、拉取热点新闻、在浏览器中构建高性能游戏以及收集更多点击流数据等等须要保持实时数据交换的场景,这个特性就特别地友好。浏览器

WebSocket 解决了什么问题

相信你们都有遇到过这样的场景,服务器上有些资源常常会进行更新,客户端须要尽可能及时的获取到这些更新,在传统的 HTTP 协议中,若是客户端不发起一个 Request 请求,那么服务器是没有办法向客户端主动发起数据的。那么咱们是如何解决客户端和服务器之间的数据更新问题的呢?服务器

比较常见的作法就是 AJAX 轮询 。客户端设置一个定时器,在必定时间内客户端会向服务器发起一个 AJAX 请求,询问服务器是否有更新,若是有更新就及时返回数据。经过定时器,客户端能够反复的去轮询服务器上相关的资源有没有更新,从而实现近乎“实时”的通信。网络

AJAX 轮询虽然缩短了客户端和服务器之间数据同步的延迟时间,但同时也带来了一些性能消耗的问题。例如,若是客户端较多,那么服务器同时接收轮询请求就会增多,这就会对服务器形成巨大的压力,轮询所产生的流量,也会对网络形成必定的消耗,另外服务器资源更新频率较为频繁,但客户端定时器时间间隔较大,或者服务器长时间没有更新资源,这就会致使资源更新不及时、带宽耗费等等问题。性能

但有了 WebSocket 以后就不一样了,在 WebSocket API 中,浏览器和服务器只须要完成一次握手,二者之间就直接能够建立持久性的链接,并进行双向数据传输。这样,即便没有来自客户端的明确请求,服务器也能够向客户端发送信息,实现反向的通信。这就是服务器与客户端之间的“全双工”通讯。优化

点击此处能够体验一下 WebSocket 的魅力。spa

WebSocket 工做原理

客户端(或多个客户端)先经过向服务器发送 HTTP 请求开始,请求中包括了 WebSocket 支持的版本号、协议的版本号、原始地址、主机地址等等一些字段给服务器端,向服务器代表客户端正在尝试创建 WebSocket 链接。htm

若是服务器检查数据包数据和格式正确,客户端和服务器端的协议版本号匹配,就接受本次握手链接,并给出相应的数据回复,一样回复的数据包也是采用 HTTP 协议传输。等待客户端确认后,就将初始 HTTP 链接升级为 WebSocket 链接,而且为每一个客户端维护该链接,从而实现双向通信。blog

WebSocket 的优点

比起传统的轮询方式,WebSocket 能够更好的节省服务器资源和带宽,而且可以进行更加实时地通信,优点以下:接口

  • 减少带宽开销。 服务器和客户端在链接创建后,相比起 HTTP 请求,交换数据时用于协议控制的数据包头部相对较小,通常只有 2 字节;
  • 加强实时性。 服务器能够随时主动给客户端下发数据,相对于 HTTP 请求须要等待客户端发起请求服务端才能响应,延迟明显更少,和传统的轮询比较,WebSocket 也能够在短期内更有效率地传递数据;
  • 维持链接状态。 在一些须要身份认证的场景下, HTTP 请求可能须要在每一个请求都携带状态信息(服务器不记录每次的请求和响应信息),而 WebSocket 一次链接创建后就会保持住会话状态,这就使其成为一种有状态的协议,后续通讯时就能够省略部分状态信息;
  • 更灵活的扩展支持。 根据 RFC6455 协议,开发者能够对 WebSocket 自定义二进制帧,相对 HTTP,能够更轻松地处理二进制内容,此外开发者也自行扩展协议、实现部分自定义的子协议。
  • 更好的压缩效果。 WebSocket 在适当的扩展支持下,能够沿用以前内容的上下文,在传递相似的数据时,能够显著地提升压缩率。

WebSocket 有这么多优点,那么它适用于哪些场景呢?下面来简单了解下:

  • 须要及时响应的场景。 当客户端须要对服务端发生的改变作出快速响应(尤为是客户端没法预测的响应)时,WebSocket 是很是适合的。例如开发一个客服系统,这每每要求实现多个用户实时沟通。若是使用 WebSocket,则每一个对话均可以实时发送和接收消息。与 HTTP 相比,WebSocket 不须要考虑发送和接收的每一个消息的 HTTP 请求/响应致使的开销,从而会有更高的执行效率。
  • 须要实时查询的场景。 例如一名篮球迷想要查询比赛结果,若是比赛是上周结束的,那么比赛结果是固定的,HTTP 在这种状况下就很是适合。可是,若是是当前正在进行的比赛,得分会不断变化,而且更新频繁,在这种状况下,WebSocket 就是更好的选择。
  • 小负载的高频消息传递。 现在愈来愈多的开发人员正在经过移动设备的 GPS 功能来记录 Web 应用程序的方位感知。若是咱们须要记录一段时间内用户的位置信息,高频率发送更加细粒度的位置数据,从而起到实时分享功能(例如运动类 APP),WebSocket 所使用的 TCP 链接会让数据交换飞起来。
  • 多人协同的场景。 例如近几年发展迅速的在线教育,学生能够足不出户,便可与老师以及其余同窗一块儿进行实时沟通与交流,诸如布置做业、师生互动、问题讨论等等强实时交互类的场景均可交由 WebSocket 协议支撑完成,从而知足低延迟,高及时的场景要求。

目前又拍云已经能够支持 WebSocket 无缝接入,依托于又拍云 CDN 1100+ 全球节点,10Tbps 带宽储备,国内主流运营商支持,经过 TCP 协议优化、链路优化、内容优化、智能调度等技术手段,大大提高加速性能。全自助化配置管理,配置策略全网 10 秒内生效;提供全方位的 API 接口,支持多样化管理,只需简单的配置,就能够迅速接入,享受全站加速。

推荐阅读

喜大普奔,又拍云全新产品 WebSocket 上线啦
全球 43 亿 IPv4 地址已耗尽!IPv6,刻不容缓

相关文章
相关标签/搜索