服务端实时推送技术对比

http里面前端请求方式一般为客户端请求->服务端响应。即内容是一次性返回的,服务端若有更新,需要用户重新请求后才能获取。那么如何能实时获取服务端数据呢?现有方式一般为四种:轮询,长轮询,SSE,websoket。
轮询
即客户端定时请求服务器资源。
缺陷:

  1. 需要经常建立tcp连接,占用服务器资源,实时效果不好
  2. http1的队头阻塞问题,响应耗时长会影响后续的请求时间
  3. 需要客户端发起后服务端才能响应

长轮询
建立连接后,服务端将请求挂起,数据有更新时再进行响应,推送结束或到达超时时间后关闭连接。主要是解决轮询的缺陷1,即频繁建立连接的问题。使用http1时,页面功能复杂时不建议使用,会阻塞数据请求。

缺陷:

  1. 服务器长时间占用,阻塞后续的请求
  2. 需要客户端发起后服务端才能响应

SSE
全称是Server-Sent-Event。SSE也是使用http协议,和轮询不同的是不需要客户端先发起请求。SSE本质是建立一个http长连接,服务端以事件的形式发送数据流。SSE和websoket相比不需要处理断连问题。
缺陷:

  1. 需要考虑浏览器兼容性
  2. 服务器单向发送数据,支持文本类型,其他类型需要编码。
  3. 不使用http2时,每个域名下可建立连接数有限制。

websoket
全双工通信,独立的ws协议,建立连接后服务端主动进行推送,支持各种数据格式。
缺陷:

  1. 建立ws连接,需要心跳机制防止断连
  2. 复杂场景,如多页面多客户端如何推送,与轮询相比实现较为复杂

参考文章
WebSocket的11个面试常见知识点
EventSource

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值