面试官 🤔:说一下 SSE 与 websocket 的区别

1,540 阅读2分钟

Screenshot 2024-07-23 at 23.37.02.png

SSE (Server-Sent Events)WebSocket 都是用于实现实时通信的技术,但它们有一些关键的区别

  1. 通信方向:

    • SSE:单向通信(服务器到客户端)
    • WebSocket:双向通信(服务器到客户端,客户端到服务器)
  2. 协议:

    • SSE:使用 HTTP 协议
    • WebSocket:使用 WebSocket 协议(初始握手通过 HTTP 升级)
  3. 连接:

    • SSE:使用标准 HTTP 连接,保持长连接
    • WebSocket:建立专用的 WebSocket 连接
  4. 数据格式:

    • SSE:仅支持文本数据,通常使用 UTF-8 编码
    • WebSocket:支持文本和二进制数据
  5. 自动重连:

    • SSE:浏览器原生支持自动重连
    • WebSocket:需要手动实现重连逻辑
  6. 跨域支持:

    • SSE:受同源策略限制,需要 CORS 支持
    • WebSocket:天生支持跨域
  7. 服务器推送:

    • SSE:设计用于服务器推送场景
    • WebSocket:可用于服务器推送,但主要用于双向通信
  8. 实现复杂度:

    • SSE:相对简单,易于实现和维护
    • WebSocket:较复杂,需要处理更多的连接状态
  9. 浏览器支持:

    • SSE:现代浏览器广泛支持,但 IE 不支持
    • WebSocket:几乎所有现代浏览器都支持
  10. 适用场景:

    • SSE:适用于通知、实时新闻、股票行情等单向数据流
    • WebSocket:适用于聊天应用、多人游戏等需要频繁双向通信的场景
  11. 防火墙穿透:

    • SSE:使用标准 HTTP,较少遇到防火墙问题
    • WebSocket:可能被某些防火墙阻止
  12. 资源消耗:

    • SSE:相对轻量,服务器资源消耗较少
    • WebSocket:维护全双工连接,可能消耗更多服务器资源

选择使用 SSE 还是 WebSocket 取决于你的具体需求。如果只需要服务器向客户端推送数据,SSE 可能是更简单、更轻量的选择。如果需要双向通信或处理大量实时数据,WebSocket 可能更合适