SSE、轮询、长轮询、WebSocket技术选项参考
内容来源:IT老齐的B站视频
2024.9.10
- 特性:SSE是一种基于HTTP的通信方式,它允许服务器向客户端推送更新。标准的web应用。SSE的设计初衷是为了提供一种轻量级的解决方案,来实现服务器到客户端的单向通信。
- 优点:
- 实现简单,不需要客户端复杂的设置
- 浏览器原生支持,不需要额外的库
- 实时性好
- 缺点:
- 只支持单向通信,即服务器到客户端。
- 不支持二进制数据,只能发送utf-8编码的消息
- 适用场景:
- 适用于只需要服务器向客户端发送数据的应用,如实时股票价格、新闻更新等。
- 优点:
- 缺点:
- 适用场景:
- 适用于小型应用或者数据更新频率不高的情况。
- 如:定时检查邮件是否更新、检查批量处理数据进度。
是对轮询的补充。
客户端发送一个http请求,会被服务器hang住(最多hang 30秒),在此期间如果有数据的变化,则会立即返回。客户端收到响应后又会立即再发送一个请求。如果在hang住的期间,没有数据的变化,服务器也会响应304,客户端收到响应后也是会立即再发送一个请求。
开发是非常简单的,不需要做特别的处理。虽然也会有资源的浪费,但是比短轮询要好很多。
- 特性:
- 客户端向服务器发送请求,服务器在没有新消息时保持连接打开,直到有新消息才返回响应信息。
- 优点:
- 在无消息的情况下不会频繁请求,节省资源。
- 最好的兼容性,应用无状态。(不需要维护连接池)
- 开发简单,扩容方便。(当高并发时,超过了现有服务器的连接数后,可方便的进行服务器的扩容,因为请求是无状态的)
- 缺点:
- 服务器需要保持连接,可能会消耗资源。(浪费也会少于短轮询)
- 适用场景:
- 消息频率不高、并发量巨大且有可能弹性扩容的场景、实时性要求极高的场景
- 如:监控报警、重要事件、高并发大流量系统服务器实时推送
- 特性:
- WebSocket是一种全双工通信协议,允许客户端与服务器之间双向通信。它使用单一的TCP连接实现高效的数据传输。
- 优点:
- 支持双向实时通信
- 较小的通信开销,因为连接保持打开状态
- 缺点:
- 实现复杂度高
- 需要处理连接管理、心跳等问题,以维持连接状态
- 在服务器扩容时,还会涉及到现有客户端连接的管理(将连接分配给新服务器),比较复杂