Polling,Long-Polling,WebSocket,Server-Sent Events是四种比较流行的客户端与服务器间的通讯方式,比如:浏览器与服务器,智能设备与服务器等。下面我们先了解一下标准的Http协议通讯时序:
- 客户端打开一个链接并向服务端请求数据
- 服务端收到我请求后处理
- 服务端将数据返回客户端
Ajax Polling
Polling技术被大多数Ajax应用使用,基本原理:客户端不停轮询服务端获取数据,如果没有数据也会返回一个空响应。时序如下:
- 客户端打开一个链接,使用http协议请求服务器端数据
- 客户端周期性的发送请求获取数据
- 服务器端响应请求,并返回一个响应
- 客户端周期性重复以上三步
image.png轮询的问题在于客户端需要不停的请求服务端,导致一个结果就是很多请求的响应都是空的,导致大量http的无用开销
Http Long-polling
这是传统轮询技术的一种变体,允许服务器推送数据可用时向客户提供信息。使用长轮询,客户端与正常轮询一样从服务器请求信息,但使用期望服务器可能不会立即响应。这就是为什么这种技术有时被称为“挂起 GET”。
- 如果服务端没有可用数据,服务端就挂起该请求直到有可用数据
- 一旦服务器端游可用数据,响应发送给客户端。客户端立即重新连接服务端,等待下次响应。
Long-Polling的生命周期如下:
- 客户端发起一个http请求等待响应
- 服务端挂起请求直到有可用数据或者链接时间超时
- 当服务端有可用数据后发送数据给客户端
- 客户端通常会立即发送一个新的长轮询请求接收响应或在暂停后允许可接受的延迟期。
-
客户端发现长链接超时后发起重新连接
image.png
WebSockets
WebSocket是在TCP之上建立了一个全双工通信通道,客户端跟服务器端可以在任何时刻发起通信。客户端通过websocket握手建立连接,一旦成功建立连接,客户端跟服务端可以在任何时候双向通信。Websocket协议使客户端与服务器端以低开销,近乎实时的方式通信。这可以通过提供标准化的服务器在不被客户端询问的情况下向浏览器发送内容的方式并允许在保持连接的同时来回传递消息。
image.png
Server-Sent Events
SSE 是一种通过 HTTP 为 Web 应用程序提供与从服务器到客户端的事件流的异步通信的技术。服务器可以向客户端发送非定向消息/事件,并且可以异步更新客户端。几乎所有浏览器都支持 SSE,除了 Internet Explorer :)
服务器发送事件 (SSE) 使服务器能够将消息从服务器发送到客户端,而无需任何轮询或长轮询
image.png
网友评论