长短轮询和WS间的区别

文章类型:Javascript

发布者:admin

发布时间:2023-02-27

一. 短轮询(Short Polling

原理:

每隔一段时间向浏览器发送 http 请求,服务器端在收到请求后,不论是否有数据更新,都响应,

本质上还是浏览器发送请求,服务器接受请求的一个过程,通过让客户端不断的进行请求,使得客户端能够模拟实时地收到服务器端的数据的变化

优缺点

1:比较简单,易于理解。

2:不断的建立 http 连接,严重浪费了服务器端和客户端的资源

二. 长轮询(Long Polling

原理:

客户端向服务器发起请求,服务器收到客户端请求后,不会直接进行响应,先挂起,然后判断服务器端数据是否有更新。

如果有更新,则进行响应,如果一直没有数据,则到达一定的时间限制才返回。客户端在处理完返回的信息后,再次发出请求,重新建立连接。

优缺点

1:多次请求-响应基于一条连接,避免资源浪费

2:连接挂起也会导致资源的浪费

三:单向服务器推送:Server-Sent Events(SSE)

原理:

SSE的本质是一个HTTP的长连接,不过发送的不是一次性的数据包,而是一个stream流,格式为text/event-stream。客户端不会关闭连接,会一直等着发过来的新的数据流

优缺点:

1:

使用 HTTP 协议,现有的服务器软件都支持

轻量级,使用简单

默认支持断线重连

支持自定义发送的消息类型

2:

只用来传送文本,二进制数据需要编码后传送

四. 全双工通信(WebSocket)

原理:

WebSocket 是一个全双工的协议,也就是通信双方是平等的,可以相互发送消息。协议标识符是ws(如果加密,则为wss),服务器网址就是 URL

tcp链路建立以后,后续所有数据双方都主动发送,不需要发送请求头

允许由服务器主动的向客户端推送信息,可以更灵活的控制连接关闭的时机

优缺点

1:

减少传统沦陷和http链接数量开销

建立在 TCP 协议之上,服务器端的实现比较容易

HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,能通过各种 HTTP 代理服务器

数据格式比较轻量,性能开销小,通信高效

可以发送文本,也可以发送二进制数据

没有同源限制,客户端可以与任意服务器通信

2:

WebSocket 协议的缺点是在服务器端的配置比较复杂