WebSocket: co to je, protokol plně duplexní komunikace a jak funguje

Autor: IT Sectr Publikováno: 2026-03-06 Doba čtení: 8 min

WebSocket — protokol plně duplexní komunikace, který zajišťuje trvalé připojení mezi klientem a serverem pro výměnu dat v reálném čase. Na rozdíl od tradičních HTTP požadavků tento protokol vytváří jedno připojení a využívá ho pro obousměrný přenos bez opakovaného handshakingu. Podle Mozilla Developer Network (2025) snižuje WebSocket zpoždění až o 50% ve srovnání s HTTP pollingem v aplikacích v reálném čase.

Hlavní body

  • WebSocket — protokol plně duplexní komunikace přes TCP pro výměnu dat v reálném čase
  • Trvalé připojení odstraňuje režii opakovaného HTTP handshakingu při každém požadavku
  • Zpoždění se snižuje o 30–50% ve srovnání s HTTP Long Pollingem díky absenci hlaviček
  • Protokol je podporován všemi moderními prohlížeči a mobilními platformami přes nativní API
  • Použití zahrnuje chaty, online hry, burzovní terminály a zařízení IoT

Co je WebSocket?

WebSocket — je komunikační protokol pracující přes TCP, který poskytuje plně duplexní kanál mezi klientem a serverem. Byl standardizován organizací IETF jako RFC 6455 v roce 2011 a je podporován všemi moderními prohlížeči, mobilními platformami a serverovými frameworky.

Na rozdíl od HTTP, kde klient iniciuje požadavek a obdrží odpověď, WebSocket umožňuje oběma stranám odesílat zprávy kdykoli po navázání spojení. To jej činí ideálním pro scénáře vyžadující okamžité doručení dat: chaty, oznámení, společné úpravy dokumentů.

Protokol WebSocket používá port HTTP 80 nebo port HTTPS 443 pro počáteční handshake, poté přepíná na vlastní protokol s minimální hlavičkou — pouhé 2 bajty namísto 800+ bajtů v HTTP. Tato vlastnost poskytuje významnou výhodu v výkonu při velkém počtu zpráv.

Klíčové vlastnosti protokolu

Připojení WebSocket začíná požadavkem HTTP Upgrade, po kterém protokol přepíná na binární formát rámců. Velikost rámce se pohybuje od 2 bajtů do 2^63 bajtů, což umožňuje přenášet jak krátké textové zprávy, tak velká binární data. Je podporována fragmentace zpráv, maskování dat od klienta k serveru a ping/pong pro udržování spojení.

Jak funguje WebSocket?

Proces navazování spojení WebSocket se skládá ze dvou fází: handshake a přenos dat. Ve fázi handshake klient odešle HTTP požadavek s hlavičkou Upgrade: websocket a server potvrdí přepnutí protokolu stavem 101 Switching Protocols. Poté spojení přechází do režimu plně duplexního přenosu.

Každá zpráva v WebSocketu je rozdělena na rámce. Rámec obsahuje opcode (text, binární data, uzavření, ping/pong), délku datové části a maskovací klíč pro data od klienta. Rámec může být fragmentován — řídicí rámce (ping/pong) mohou být přenášeny mezi fragmenty zprávy, což zabraňuje přerušení spojení při dlouhém přenosu.

js
const ws = new WebSocket('wss://example.com/chat')

ws.addEventListener('open', () => {
    console.log('Připojení navázáno')
    ws.send('Ahoj servere!')
})

ws.addEventListener('message', (event) => {
    console.log('Přijato:', event.data)
})

ws.addEventListener('close', () => {
    console.log('Připojení uzavřeno')
})

V uvedeném příkladu klient vytvoří objekt WebSocket s uvedením zabezpečené URL wss://. Po otevření spojení je odeslána uvítací zpráva a obsluha message přijímá odpovědi od serveru. Při uzavření se aktivuje obsluha close — to je důležité pro opětovné připojení při přerušení sítě.

WebSocket vs HTTP: srovnání

Hlavní rozdíl mezi WebSocketem a HTTP spočívá v modelu interakce. HTTP funguje na schématu požadavek-odpověď: klient iniciuje požadavek, server vrátí odpověď, spojení se uzavře. WebSocket naproti tomu vytváří trvalý kanál, přes který mohou obě strany iniciovat přenos kdykoli.

Pro aplikace vyžadující nízkou latenci a stálý tok dat je WebSocket výrazně efektivnější. HTTP Long Polling — alternativa, při které server drží požadavek otevřený, dokud se neobjeví data — vytváří nadměrnou zátěž na server a zvyšuje spotřebu paměti kvůli mnoha současným připojením.

ParametrWebSocketHTTP
ModelPlně duplexníPožadavek-odpověď
Hlavička2–14 bajtů400–800 bajtů
Trvalé připojeníAno, jednoNe, nové na požadavek
LatenceNízká (1–5 ms)Vysoká (50–200 ms)
Protokolws:// nebo wss://http:// nebo https://

Podle High Performance Browser Networking (Grigorik, O’Reilly) WebSocket snižuje latenci sítě v scénářích reálného času o 40–60% ve srovnání s HTTP Long Pollingem a zatížení serveru klesá 3–5krát díky odstranění opakovaných handshaků.

Kde se WebSocket používá

Díky nízké latenci a obousměrné komunikaci se WebSocket používá v široké škále aplikací. Klíčové scénáře zahrnují okamžitou výměnu zpráv, synchronizaci stavu ve hrách a přenos tržních dat ve finančních systémech.

Chaty a messengery

WebSocket se stal de facto standardem pro chatovací aplikace. Platformy jako Slack, Telegram Web a WhatsApp Web používají WebSocket pro okamžité doručování zpráv. Protokol umožňuje odesílat jak textové zprávy, tak soubory přes jediný kanál a mechanismus ping/pong udržuje spojení aktivní i při nečinnosti.

Online hry

Víceuživatelské prohlížečové a mobilní hry vyžadují minimální latenci pro synchronizaci stavu hráčů. WebSocket přenáší souřadnice, akce a události v reálném čase bez zpoždění HTTP požadavků. Frameworky jako Socket.IO a Colyseus abstrahují práci na nízké úrovni s protokolem a přidávají automatické znovupřipojení a místnosti.

Finanční aplikace

Burzovní terminály a obchodní platformy používají WebSocket pro příjem kotací v reálném čase. Zpoždění několika milisekund může stát miliony dolarů, proto finanční API — například Binance WebSocket Streams, Coinbase Pro — poskytují právě WebSocket rozhraní pro tržní data.

Mobilní aplikace a IoT

V mobilním vývoji se WebSocket používá přes nativní API: URLSessionWebSocketTask na iOS a OkHttp WebSocket na Androidu. Pro Flutter existuje knihovna web_socket_channel a pro React Native — react-native-websocket. Zařízení IoT používají WebSocket pro přenos telemetrie a příjem řídicích příkazů, protože protokol spotřebovává méně energie než neustálý HTTP polling.

Příklady kódu WebSocket

Podívejme se na příklad serverové části v Node.js s knihovnou ws — nejpopulárnější implementací WebSocketu pro JavaScript. Server přijímá připojení, zpracovává zprávy a vysílá je všem připojeným klientům.

js
const WebSocket = require('ws')
const wss = new WebSocket.Server({ port: 8080 })

wss.on('connection', (ws) => {
    console.log('Nový klient připojen')

    ws.on('message', (data) => {
        console.log('Přijato:', data.toString())
        ws.send('Server obdržel vaši zprávu')
    })

    ws.on('close', () => {
        console.log('Klient odpojen')
    })
})

console.log('WebSocket server spuštěn na portu 8080')

Server vytváří instanci WebSocket.Server na portu 8080 a čeká na připojení. Každému novému klientovi je přiřazen samostatný objekt ws, přes který může server odesílat jednotlivé zprávy. Vysílání zpráv všem klientům se provádí hromadným průchodem přes pole připojení. Při velkém počtu klientů (více než 1000) se doporučuje používat knihovny s podporou clusterování, jako je Socket.IO, které přidávají škálování přes Redis a automatické znovupřipojení.

Odeslání zprávy všem klientům

js
wss.clients.forEach((client) => {
    if (client.readyState === WebSocket.OPEN) {
        client.send('Zpráva pro všechny účastníky')
    }
})

Kontrola readyState před odesláním je povinná: pokud se klient již odpojil, volání send vyvolá chybu. Příznak WebSocket.OPEN zaručuje, že spojení je aktivní a zpráva bude doručena.

Pro mobilní iOS aplikace je WebSocket implementován přes URLSessionWebSocketTask, dostupný od iOS 13. Relace vytváří úlohu s URL protokolu wss://, poté jsou volány metody send a receive. Příjem zpráv lze organizovat pomocí nepřetržité rekurze receive, která čeká na další zprávu po zpracování předchozí, což zajišťuje nepřetržitý příjem dat bez opětovného připojení. Pro Android se používá OkHttp WebSocket, který poskytuje podobné rozhraní s callbacky onOpen, onMessage, onClosing a onClosed a také automatické znovupřipojení při přerušení spojení.

Při práci s WebSocketem v mobilních aplikacích je důležité zohlednit správu životního cyklu: když aplikace přejde do pozadí, spojení může být systémem přerušeno. Na iOS je nutné obnovit spojení při návratu do popředí prostřednictvím delegáta sceneDidBecomeActive. Na Androidu je třeba použít Lifecycle-aware komponenty nebo Service pro udržení spojení. Dále se doporučuje implementovat exponential backoff při opětovném připojování — zvyšovat interval mezi pokusy z 1 na 30 sekund, aby nedocházelo k nadměrnému zatížení serveru při dočasných síťových problémech.

Často kladené otázky

Čím se WebSocket liší od HTTP?

WebSocket vytváří trvalé plně duplexní spojení, přes které mohou obě strany odesílat data kdykoli. HTTP funguje na schématu požadavek-odpověď, kde každá výměna vyžaduje nové spojení a plné hlavičky. WebSocket používá jeden TCP kanál a hlavičky pouze 2–14 bajtů, což radikálně snižuje zpoždění.

Jaký port používá WebSocket?

WebSocket používá port 80 pro nezabezpečená spojení (ws://) a port 443 pro zabezpečená (wss://). To umožňuje procházet přes většinu proxy serverů a firemních firewallů bez dodatečné konfigurace. Port 443 se doporučuje pro produkční prostředí kvůli šifrování TLS.

Je WebSocket podporován v mobilních aplikacích?

Ano, WebSocket je podporován na všech mobilních platformách. V iOS je nativní třída URLSessionWebSocketTask dostupná od iOS 13. V Androidu — třída OkHttp WebSocket a standardní java.net.WebSocket. Pro React Native existuje knihovna react-native-websocket.

Co je WebSocket Secure (wss://)?

WebSocket Secure — zabezpečená verze protokolu pracující přes TLS. Všechna data jsou šifrována stejně jako v HTTPS. WSS je povinný pro produkční aplikace, zejména při přenosu autentizačních tokenů nebo osobních údajů přes WebSocket.

Jaké alternativy k WebSocketu existují?

Hlavní alternativy: HTTP Long Polling (server drží požadavek otevřený), Server-Sent Events (jednosměrný tok ze serveru) a WebRTC Data Channel (peer-to-peer komunikace). Server-Sent Events jsou jednodušší na implementaci, ale nepodporují odesílání od klienta k serveru.

Souhrn

  • WebSocket — plně duplexní protokol v reálném čase přes TCP, standardizovaný jako RFC 6455
  • Trvalé připojení odstraňuje režii HTTP handshaku a snižuje zpoždění na 1–5 ms
  • Rámec WebSocketu má hlavičku pouze 2–14 bajtů oproti 400–800 bajtům v HTTP
  • Používá se v chatech, online hrách, burzovních terminálech, IoT a společných úpravách
  • WSS poskytuje šifrování TLS a doporučuje se pro produkční prostředí
  • Protokol je podporován všemi prohlížeči, mobilními platformami a serverovými jazyky
  • Používejte WebSocket pro funkce v reálném čase a HTTP pro standardní REST požadavky

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také