浏览器与服务器实时通信

  • 简介

  • Long-Polling

长轮询是一种模拟HTTP上服务器推送的技术,通过保持连接打开状态直到有新数据可用来减少不必要的网络流量。

  • WebSocket

WebSocket提供了一个全双工的、长期存在的连接通道,适合需要低延迟的应用场景,如实时聊天、游戏和金融交易平台。

  • 服务器发送事件(Server-Sent Events, SSE)

服务器发送事件(Server-Sent Events, SSE)是一种从服务器单向推送更新到客户端的简单方法,适用于只需要服务器更新的场景,如实时新闻源、体育比分或需要实时更新的情况。SSE在连接断开时会自动重连,管理起来比WebSocket更简单。

  • WebTransport

WebTransport是一个基于HTTP/3 QUIC协议的新兴API,旨在实现高效、低延迟的客户端和服务器通信。它支持多流传输、可靠和不可靠的数据以及乱序发送数据,适用于高性能应用,如实时游戏和流媒体。然而,WebTransport目前仍处于工作草案阶段,支持度不广。

  • WebRTC

WebRTC是一个用于浏览器和移动应用之间实时通信的开源项目,支持音频、视频和数据的点对点交换,但不直接与上述技术相比较,因为它主要用于客户端之间的交互,而非服务器客户端通信。

  • 限制

  • 基础限制
  1. 只有WebSocket和WebTransport支持双向通信。
  2. 长轮询理论上可以双向通信,但不推荐,因为发送新数据到现有的长轮询连接会需要额外的HTTP请求。
  3. SSE不支持向服务器发送数据,只能接收服务器的初始请求,且通常不能在HTTP正文中发送POST数据,但可以使用一些库(如eventsource polyfill)来扩展其功能。
  • 浏览器的连接限制:
    大多数现代浏览器每个域名允许六个连接,这限制了持续服务器到客户端消息传递方法的使用。尽管可以通过使用HTTP/2或HTTP/3来解决,这些协议使用单一连接并利用多路复用技术,但仍有默认的最大并发流设置(通常是100个并发流)。
    在移动应用中,操作系统可能会关闭后台应用的开放连接,导致WebSocket等技术难以维持。在这种情况下,通常使用移动推送通知来更有效地发送数据。
    企业环境中的代理和防火墙可能阻止非HTTP连接,使得WebSocket等技术难以集成,而SSE使用标准HTTP请求,可能更容易适应这些环境。

  • 性能对比

WebSocket、SSE和WebTransport在低延迟、高吞吐量和可扩展性方面表现相似,但WebTransport依赖于新的HTTP/3协议,未来可能会有更多性能优化。
长轮询在延迟和吞吐量方面较差,因为它依赖于频繁建立新的HTTP连接。

  • 场景

  1. SSE适合需要频繁服务器到客户端更新的简单场景,如新闻提要和实时数据流。
  2. WebSocket适用于需要持续双向通信的应用,如游戏和聊天应用。
  3. WebTransport是未来的趋势,但目前支持度不足,适用于需要高效多流通信的场景。
  4. 长轮询现在已被其他技术取代,不建议作为首选方案。

在构建实时应用程序时,应考虑这些技术的局限性和适用场景,并确保处理可能的连接问题,如客户端重新连接时可能错过的事件,以及公司网络环境中可能遇到的代理和防火墙问题。

ref:

WebSockets vs Server-Sent-Events vs Long-Polling vs WebRTC vs WebTransport


浏览器与服务器实时通信
https://fatwang1.github.io/2024/06/04/2024060400/
作者
衣云乘风
发布于
2024年6月4日
许可协议