马上下班,马上五一,快看完这一篇再下班吧🫰
服务端向客户端推送数据的实现方案有哪几种?
毫无疑问:
- 轮询
- websocket
- SSE
轮询简介
在很久很久以前,前端一般使用轮询来进行服务端向客户端进行消息的伪推送,为什么说轮询是伪推送?因为轮询本质上还是通过客户端向服务端发起一个单项传输的请求,
服务端对这个请求做出响应而已。通过不断的请求来实现服务端向客户端推送数据的错觉。并不是服务端主动向客户端推送数据。显然,轮询一定是上述三个方法里最下策的决定。
缺点:
- 首先轮询需要不断的发起请求,
每一个请求都需要经过http建立连接的流程
(比如三次握手,四次挥手),是没有必要的消耗。 - 客户端需要从页面被打开的那一刻开始
就一直处理请求
。虽然每次轮询的消耗不大,但是一直处理请求对于客户端来说一定是不友好的。 - 浏览器请求并发是有限制的。比如Chrome 最大并发请求数目为 6,这个限制还有一个前提是针对同一域名的,超过这一限制的后续请求将会被阻塞。而
轮询意味着会有一个请求长时间的占用并发名额。
- 而如果轮询时间较长,可能又
没有办法非常及时
的获取数据
websocket简介
websocket是一个双向通讯的协议,他的优点是,可以同时支持客户端和服务端彼此
相互进行通讯。功能上很强大。
缺点也很明显,websocket是一个新的协议,ws/wss。也就是说,支持http协议的浏览器不一定支持ws协议。
相较于SSE来说,websocket因为功能更强大。结构更复杂。所以相对比较重
。
SSE简介
sse是一个单向通讯的协议也是一个长链接
,它只能支持服务端主动向客户端推送数据,但是无法让客户端向服务端推送消息。
长链接是一种HTTP/1.1的持久连接技术,它允许客户端和服务器在一次TCP连接上进行多个HTTP请求和响应,而不必为每个请求/响应建立和断开一个新的连接。长连接有助于减少服务器的负载和提高性能。
SSE的优点是,它是一个轻量级的协议,相对于websockte来说,他的复杂度就没有那么高,相对于客户端的消耗也比较少
。而且SSE使用的是http协议
(websocket使用的是ws协议),也就是现有的服务端都支持SSE,无需像websocket一样需要服务端提供额外的支持。
Websocket和SSE分别适用于什么业务场景?
对于SSE来说,它的优点就是轻
,而且对于服务端的支持度要更好。换言之,可以使用SSE完成的功能需求,没有必要使用更重更复杂的websocket。
比如:数据大屏的实时数据
,消息中心的消息推送
等一系列只需要服务端单方面推送而不需要客户端同时进行反馈的需求,SSE就是不二之选。
对于Websocket来说,他的优点就是可以同时支持客户端和服务端的双向通讯。所适用的业务场景:最典型的就是聊天功能。这种服务端需要主动向客户端推送信息,并且客户端也有向服务端推送消息的需求时
,Websocket就是更好的选择。
介绍完了,直接上SSE例子,SSE的API
可参考峰哥
直接拿写好的node和html来演示
node基于express创建接口就不详细说了,
转载websocket也有示例,节后再说,兄弟们,下班~🏃🏼