实时消息推送的方案
- 轮询(不适于频繁请求的场景)
- 长轮询 前端发起请求,获取最新的消息,后端不会响应,除非有最新消息,再响应前端
会出现线程堆积,造成服务器压力过大 - 短轮询 隔一段时间就发送请求,以便获取最新的消息,造成资源浪费,
SSE(Server-Sent Events)
SSE 是一种单向的、持久的连接前端发请求,建立一个长链接,服务端会持续向客户端发送响应,这是 HTTP 自带的功能。只能实现服务器到客户端的单向推送。(在线聊天、实时监控、新闻天气推送)WebSocket
能够在客户端和服务器之间建立即时的通信连接。通过 WebSocket,服务器可以主动向客户端推送消息,而无需客户端主动请求。这种方案具有实时性好、性能高等优势,适用于大规模的实时推送场景。
- netty 就是基于 websocket 封装的实时通信框架
- MQTT
发布-订阅模式的传输协议,针对于物联网,适用于资源受限的设备和低带宽,高延迟或不稳定的网络环境,