Pro real-time komunikaci mezi klientem a serverem existují tři hlavní přístupy, každý s vlastními výhodami a ideálním use case. Výběr závisí na tom, zda potřebujete obousměrnou komunikaci, jednosměrný stream dat, nebo jen kompatibilitu se starší infrastrukturou. Správná volba ovlivňuje latenci, škálovatelnost a složitost implementace.
WebSocket¶
Plně duplexní protokol — klient i server posílají data kdykoliv přes jedno persistentní TCP spojení. Po úvodním HTTP handshake se spojení upgraduje na WebSocket a zůstává otevřené.
const ws = new WebSocket('wss://api.example.com/ws');
ws.onmessage = (e) => console.log(e.data);
ws.send('Hello');
WebSocket je ideální pro scénáře s vysokou frekvencí zpráv oběma směry — chat, multiplayer hry, kolaborativní editory. Nevýhoda: složitější škálování (sticky sessions nebo Redis pub/sub pro distribuci zpráv), nutnost řešit reconnect logiku a load balancer musí podporovat WebSocket upgrade.
SSE¶
Server-Sent Events nabízí jednosměrný stream ze serveru ke klientovi přes standardní HTTP. Jednodušší než WebSocket s automatickým reconnectem a nativní podporou v prohlížečích.
const es = new EventSource('/events');
es.onmessage = (e) => console.log(e.data);
SSE je vhodné pro notifikace, živé feedy, dashboardy a streaming AI odpovědí (LLM token streaming). Funguje přes HTTP/2, takže nevyžaduje speciální infrastrukturu. Omezení: pouze server-to-client a maximálně 6 spojení per doména v HTTP/1.1 (HTTP/2 toto řeší multiplexingem).
Long Polling¶
Request → server drží spojení dokud nemá nová data → odpověď → klient okamžitě pošle nový request. Simuluje push přes standardní HTTP.
Nejjednodušší na implementaci, funguje všude bez speciální infrastruktury. Vyšší latence a overhead z opakovaných HTTP requestů. Vhodné pouze jako fallback, když WebSocket ani SSE nejsou k dispozici.
Kdy co¶
- WebSocket — chat, hry, collaboration, real-time trading (obousměrné, vysoká frekvence)
- SSE — notifikace, feed, dashboardy, LLM streaming (jednosměrné, server push)
- Long Polling — fallback pro legacy prostředí
WebSocket pro duplex, SSE pro stream¶
Long polling jen jako fallback. Pro většinu moderních aplikací je SSE dostatečné a jednodušší na implementaci než WebSocket.