WebSocket原理(对比Ajax轮询、长轮询)

1.WebSocket简单介绍:

WebSocket是HTML5开始提供的一种,可以在单个 TCP 连接上进行全双工通讯的协议,即客户端与服务端只需要进行一次握手,客户端与服务端之间就可以进行数据传输了。

2.WebSocket具有什么优点:

先介绍两种在WebSocket出现之前,实现信息实时传递的两种方式:Ajax轮询以及长轮询

Ajax轮询:

Ajax轮询指的是,客户端每隔一段时间就向服务端发送一个请求,定时的询问服务端是否有东西要发送,无论服务端是否有东西要发送,服务端都需要一个Response对应一个Request的去回应客户端,随后重新建立连接,重复以上操作。

以上可以看出,Ajax轮询是属于比较消耗资源的一种方式,并且需要服务器有很快的处理速度和资源

long poll 长轮询:

long poll长轮询原理其实跟Ajax轮询差不多,但是区别在于,在长轮询这种方式下,客户端与服务端建立连接后,服务端如果没有东西要发送,则一直不返回Response给客户端,直至有东西发送才返回,然后重新建立连接,周而复始。

以上可以看出,长轮询需要服务器有很强的同时容纳多个请求的能力,即并发处理能力

WebSocket:

从以上两个例子可以看出,这两种方式都不是最适合的方式,需要很多资源。

此时,HTML5引入的WebSocket协议就解决了以下两个难题:

难题1(http协议的被动性):采用 WebSocket 协议后,服务端可以主动推送消息给客户端;而不需要客户端以轮询的方式发起请求到服务端以获取数据更新反馈;这样一来,客户端只需要经过一次HTTP请求,就可以做到源源不断的信息传送了。

难题2(http协议的健忘性):Ajax轮询和长轮询是每次http请求前都要建立连接,http请求响应完成后,服务端就会断开连接,且把连接的信息全都忘记了;所以每次建立连接都要重新传输连接上下文,将客户端的连接上下文来告诉服务端;而 WebSockct只需要一次HTTP 握手,整个通讯过程是建立在一次连接状态中的,服务端会一直推送消息更新反馈到客户端,直到客户端关闭请求,这样就无需客户端为发送消息而建立不必要的 tcp 连接 和 为了建立tcp连接而发送不必要的冗余的连接上下文消息。

你可能感兴趣的:(工作日常)