一. 什么是 WebSocket
WebSocket 是 HTML5 开始提供的一种在单个 TCP 连贯上进行全双工 (full-duplex) 通信的协定。没有了 Request 和 Response 的概念,两者位置齐全平等,连贯一旦建设,就建设了真持久性连贯,单方能够通过 WebSocket 随时向对方发送数据。
WebSocket 有如下个性:
- 随同着 HTML5 而呈现
- Web 端的 Socket,服务器端和客户端可互相发送音讯
- 实质上是 TCP 连贯
- 为解决客户端与服务端实时通信而产生的技术
现有的用于服务器和客户端之间的双工通信技术:
- 轮询(Polling):
客户端每隔固定工夫向后盾发送一次申请,询问服务器是否有新数据。
毛病:
1. 提早,须要固定的轮询工夫,不肯定是实时数据。
2. 大量消耗服务器内存和宽带资源,因为不停的申请服务器,很多时候 并没有新的数据更新,因而绝大部分申请都是有效申请。 - 长轮询(Long Polling):
客户端发送 HTTP 给服务器之后,有没有新音讯,如果没有新音讯,就始终期待。直到有音讯或者超时了,才会返回给客户端。音讯返回后,客户端再次建设连贯,如此重复。
长处:在某种程度上减小了网络带宽和 CPU 利用率等问题。
毛病:
1. 如果是高实时的零碎,必定不会采纳这种方法。因为一个 GET 申请来回须要 2 个 RTT,很可能在这段时间内,数据变化很大,客户端拿到的数据曾经延后很多了。
2. 网络带宽低利用率的问题也没有从本源上解决。每个 Request 都会带雷同的 Header。
注:
RTT(Round-Trip Time): 往返时延。在计算机网络中它是一个重要的性能指标, 示意从发送端发送数据开始, 到发送端收到来自接收端的 确认(接收端收到数据后便立刻发送确认), 总共经验的时延 RTT(Round-Trip Time): 往返时延。在计算机网络中它是一个重要的性能指标, 示意从发送端发送数据开始, 到发送端收到来自接收端的 确认(接收端收到数据后便立刻发送确认), 总共经验的时延。 - 数据流(Streaming):
服务器放弃连贯关上并与客户端一起激活,直到并且除非提取所需的数据。在这种状况下,连贯是无限期关上的。
毛病:
1. 流传输包含 HTTP 标头,这会减少文件大小,减少提早。
2. 在服务器往客户端推送,这个方向的流实时性比拟好。然而仍旧是单向的,客户端申请服务器仍然还须要一次 HTTP 申请。 - AJAX:
AJAX 基于 Javascript 的 XmlHttpRequest 对象。它是 Asynchronous Javascript 和 XML 的缩写模式。XmlHttpRequest 对象容许执行 Javascript 而无需从新加载残缺的网页。AJAX 仅发送和接管网页的一部分。
毛病:
1. 须要发送 HTTP 标头,这使数据量更大。
2. 是半双工的。
3. 服务器耗费更多资源