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

Long Polling & Polling Patterns

  • Some miss long polling for its simplicity and HTTP-friendliness; others argue real-world deployments show it’s not “stupidly simple” once you consider timeouts, proxies, retries, and message ordering.
  • Long polling is praised for interoperability with generic HTTP tools and APIs.
  • Several note that any push-style system needs a way to rehydrate full state and handle missed updates; at that point, plain polling or cursored “events endpoints” can be attractive.
  • Debate on scalability: one side says long polling scales linearly like other techniques; another notes extra subscription churn and RTT/packet overhead make it “least scalable” in practice.

Server-Sent Events (SSE)

  • Widely liked for simplicity, easy integration with basic stacks (e.g., Apache + PHP), and CDN-friendliness.
  • Seen as “standardized long polling/Comet” over chunked responses.
  • Limitations: text-only (binary requires base64 or special encodings), browser-imposed connection limits with HTTP/1.1, and limited header control in the native EventSource API.
  • Workarounds include HTTP/2/3 multiplexing, domain sharding, SharedWorkers/broadcast channels, and custom SSE clients with richer options.
  • Some report SSE reliability issues in locked-down/enterprise environments and with certain server frameworks.

WebSockets

  • Popular as a default for bidirectional real-time, often with JSON-RPC on top.
  • Criticisms: harder to scale and operate, lack of built-in multiplexing and backpressure (though new WebSocketStream aims to help), and ongoing firewall/corporate-network issues in some environments.
  • Many use libraries that provide fallbacks (long polling, SSE, etc.) to handle broken proxies and old browsers.

WebRTC & WebTransport

  • WebRTC works reliably in practice for NAT traversal and is widely deployed; best suited for P2P and rich media, less so for simple server push.
  • WebTransport is appreciated for streams, backpressure, and avoiding head-of-line blocking; some already use it for games.
  • Concern: UDP/HTTP/3 may be blocked on some networks, forcing dual implementations with WebSockets.

HTTP Streaming & Variants

  • Several emphasize generic HTTP response streaming (e.g., JSONL over fetch streams, HTTP-streaming transports) as a powerful, often underused option, sometimes preferred over SSE for finite streams.

Auth, Background, and Mobile

  • Browser APIs for SSE/WebSockets make custom auth headers awkward; cookies are the common workaround, or custom clients.
  • Mobile and background behavior is problematic: radios, timeouts, and worker lifetimes can break “always-on” connections; push APIs and refresh buttons remain important fallbacks.