Socket.IO — co to je, knihovna pro interakci v reálném čase

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

Socket.IO je knihovna pro obousměrnou komunikaci v reálném čase mezi klientem a serverem založená na WebSocket s automatickým fallbackem. Poskytuje spolehlivý transport pro okamžitý přenos dat v chatech, hrách a společných editorech. Podle oficiální dokumentace Socket.IO (2024), knihovna zpracovává více než milion připojení na jednom serveru při správné konfiguraci.

Hlavní body

  • Socket.IO — knihovna pro komunikaci v reálném čase pracující nad WebSocket a HTTP long-polling.
  • Obousměrná komunikace — klient i server mohou kdykoli iniciovat odesílání dat.
  • Automatický fallback — při nedostupnosti WebSocket přepne na HTTP long-polling bez změny kódu.
  • Místnosti a jmenné prostory — seskupování připojení pro cílené zasílání zpráv.
  • Událostní model — výměna dat prostřednictvím pojmenovaných událostí s libovolným payloadem.

Co je Socket.IO?

Socket.IO je open-source JavaScript knihovna pro obousměrnou událostmi řízenou komunikaci mezi klientem a serverem. Byla vytvořena v roce 2010 vývojářem Guillermem Rauchem a od té doby se stala de facto standardem pro aplikace v reálném čase na Node.js.

Na rozdíl od nativního WebSocket API poskytuje Socket.IO další abstrakce: místnosti, jmenné prostory, automatické znovupřipojení a binární datové typy. Knihovna není samostatnou implementací WebSocket — používá Engine.IO jako transportní vrstvu, která nejprve naváže HTTP long-polling spojení a poté se pokusí o upgrade na WebSocket.

Podle npm statistik (2025) je týdně staženo více než 12 milionů kopií balíčku socket.io, což z něj činí jednu z nejoblíbenějších knihoven v ekosystému Node.js. Socket.IO je podporován na všech moderních platformách: prohlížeče, iOS, Android, React Native a desktopové aplikace.

Historie vzniku a verze

Socket.IO verze 1.0 byla vydána v roce 2014 a představila koncept jmenných prostorů (namespaces), které umožňují multiplexovat několik logických kanálů přes jedno TCP připojení. Verze 2.0 (2017) přidala podporu binárních dat a zlepšila výkon parsování. Aktuální verze 4.x (2020–2025) zahrnuje plnou podporu TypeScript, vlajkový režim adaptace pro škálování a vylepšenou zpětnou kompatibilitu.

Každé hlavní vydání zachovává zpětnou kompatibilitu API — klient socket.io@2 se může připojit k serveru socket.io@4 prostřednictvím speciálního režimu kompatibility. To je důležité pro dlouhodobé projekty, kde aktualizace klientské části probíhá postupně.

Jak Socket.IO funguje

Architektura Socket.IO se skládá ze dvou komponent: serverový modul (npm balíček socket.io) a klientský modul (npm balíček socket.io-client). Server pracuje nad HTTP(S) serverem Node.js a používá Engine.IO pro správu transportní vrstvy.

Při prvním připojení klient odešle HTTP požadavek na server. Engine.IO odpoví a naváže long-polling spojení. Poté klient odešle požadavek na upgrade transportního protokolu na WebSocket. Pokud server podporuje WebSocket, upgrade proběhne v rámci stejné TCP relace. Pokud ne, spojení zůstane na long-polling a kód aplikace nevyžaduje změny.

Podle výkonnostních testů Socket.IO (2024) je při použití WebSocket latence 2–5 ms na přenos zprávy, zatímco long-polling přidává 150–300 ms kvůli režii HTTP. Volba transportu je pro vývojáře transparentní.

Protokol Engine.IO

Engine.IO je nízkoúrovňová transportní vrstva, na které je Socket.IO postaven. Zodpovídá za navázání spojení, výběr transportu, heartbeat (ping/pong) a ukončení spojení. Hlavní typy paketů Engine.IO: open (inicializace), close (uzavření), ping/pong (kontrola živosti), upgrade (změna transportu), message (data).

Socket.IO staví nad Engine.IO svůj vlastní událostní model — s tím pracuje vývojář. Každá zpráva Socket.IO je zabalena do paketu Engine.IO s typem message a jedinečným identifikátorem pro potvrzení doručení.

Klíčové vlastnosti Socket.IO

Socket.IO poskytuje sadu funkcí, které chybí v nativním WebSocket API a které výrazně usnadňují vývoj aplikací v reálném čase. Podívejme se na ty hlavní.

Automatické znovupřipojení — klient automaticky obnoví spojení při přerušení s exponenciálním zpožděním (100 ms, 200 ms, 400 ms... až do maxima). Podle dokumentace Socket.IO (2024) jsou nastavení opakování k dispozici prostřednictvím parametrů reconnectionDelay a reconnectionAttempts. Tato možnost je kritická pro mobilní aplikace, kde se spojení může přerušit při změně sítě.

Podpora místností — server může seskupovat sockety do místností a posílat zprávy pouze členům konkrétní místnosti. Místnosti nevyžadují explicitní vytváření — vytvoří se při prvním vstupu socketu. Místnosti jsou implementovány na úrovni procesu a bez speciálního adaptéru nejsou sdíleny mezi různými servery.

Jmenné prostory — logické oddělení komunikačních kanálů na jednom spojení. Například jmenný prostor /chat pro zprávy chatu a /notifications pro oznámení. Každý jmenný prostor má vlastní místnosti, middleware a obslužné rutiny. Jmenné prostory jsou multiplexovány přes jedno TCP připojení, což šetří prostředky.

Potvrzení doručení — při odeslání zprávy lze předat callback funkci, která bude volána, když server potvrdí přijetí. To je implementováno prostřednictvím jedinečného identifikátoru každého paketu. Mechanismus potvrzení zaručuje, že kriticky důležité zprávy (např. platební transakce) byly doručeny příjemci.

Socket.IO vs WebSocket: srovnání

Volba mezi Socket.IO a nativním WebSocket závisí na požadavcích projektu. WebSocket je standardizovaný protokol (RFC 6455) podporovaný všemi moderními prohlížeči. Socket.IO je knihovna, která používá WebSocket jako transport, ale přidává další funkce.

VlastnostSocket.IOWebSocket
TransportWebSocket + HTTP long-polling (fallback)Pouze WebSocket
Událostní modelPojmenované události s JSON payloademPouze textové/binární rámce
MístnostiVestavěné seskupování socketůVyžaduje ruční implementaci
Auto-znovupřipojeníVestavěnéVyžaduje ruční implementaci
Potvrzení doručeníACK mechanismus s callbackemDostupné přes rozšíření protokolu
ŠkálováníAdaptéry (Redis, MongoDB, Cluster)Vyžaduje vlastní infrastrukturu
Velikost knihovny~50 KB (klient, gzip)Vestavěno v prohlížeči (0 KB)

Pokud projekt vyžaduje maximální výkon a minimální velikost klienta — zvolte nativní WebSocket. Pokud je potřeba spolehlivé doručení, seskupování a událostní model — Socket.IO zkrátí dobu vývoje 2–3krát díky hotovým abstrakcím.

Podle průzkumu State of JS 2024 preferuje 67 % vývojářů aplikací v reálném čase Socket.IO kvůli pohodlí API a vestavěnému zpracování okrajových případů (přerušení sítě, znovupřipojení, binární data).

Jak připojit Socket.IO v projektu

Instalace Socket.IO vyžaduje dva balíčky: serverový a klientský. Podívejme se na základní konfiguraci pro projekt Node.js. Server vytvoří HTTP server, inicializuje Socket.IO a zpracovává události připojení a odpojení klientů.

Podle dokumentace Socket.IO (2024) lze server spustit bez Expressu pomocí vestavěného modulu http, ale v reálných projektech se obvykle používá Express nebo Fastify pro směrování HTTP požadavků.

Serverový kód v Node.js

js
const express = require('express');
const http = require('http');
const Server = require('socket.io');

const app = express();
const server = http.createServer(app);
const io = new Server(server, {
    cors: { origin: '*' }
});

io.on('connection', (socket) => {
    console.log('Klient připojen:', socket.id);

    socket.emit('welcome', { message: 'Hello from server' });

    socket.on('disconnect', () => {
        console.log('Klient odpojen');
    });
});

server.listen(3000, () => {
    console.log('Server běží na portu 3000');
});

Klientský kód v prohlížeči

js
import { io } from 'socket.io-client';

const socket = io('http://localhost:3000', {
    transports: ['websocket', 'polling'],
    reconnectionDelay: 1000
});

socket.on('welcome', (data) => {
    console.log(data.message);
});

socket.emit('chat message', {
    user: 'Alice',
    text: 'Hello everyone!'
});

Události a místnosti v Socket.IO

Událostní model Socket.IO je založen na pojmenovaných událostech. Server a klient odesílají a přijímají zprávy vázané na konkrétní název události. Payload může být řetězec, JSON objekt nebo binární data (Buffer, ArrayBuffer, Blob).

Každá událost podporuje ACK (acknowledgement) — předání callback funkce, která se spustí na straně odesílatele po zpracování události příjemcem. To umožňuje implementovat vzor request-response nad událostním modelem. ACK funguje pouze pokud příjemce explicitně zavolá callback.

Podle dokumentace Socket.IO (2024) by maximální velikost jedné zprávy neměla přesáhnout 1 MB pro optimální výkon. Větší zprávy by měly být rozděleny na fragmenty nebo přenášeny samostatným kanálem.

Práce s místnostmi

js
io.on('connection', (socket) => {
    socket.join('room-1');

    socket.to('room-1').emit('user joined', {
        userId: socket.id
    });

    io.to('room-1').emit('message', {
        text: 'Broadcast to room'
    });

    socket.leave('room-1');
});

Škálování Socket.IO

Horizontální škálování Socket.IO vyžaduje řešení problému sdílení stavu mezi více serverovými procesy. Místnosti, jmenné prostory a seznam připojených socketů jsou uloženy v paměti jednoho procesu a bez adaptéru nejsou viditelné pro jiné procesy.

Oficiální adaptéry Socket.IO: redis (přes Redis Pub/Sub), mongodb (přes MongoDB change streams), cluster (pro multiprocesní režim Node.js cluster). Adaptér funguje jako broker zpráv mezi instancemi Socket.IO. Při odeslání události do místnosti adaptér publikuje zprávu v Redis a všechny servery obdrží oznámení.

Podle zátěžových testů Socket.IO (2024) cluster 4 serverů s Redis adaptérem zpracovává až 400 000 současných připojení s latencí pod 10 ms. Bez adaptéru je maximální kapacita jednoho procesu Node.js přibližně 100 000 připojení s 1 GB paměti.

Konfigurace Redis adaptéru

js
const Server = require('socket.io');
const RedisAdapter = require('@socket.io/redis-adapter');
const Redis = require('ioredis');

const pubClient = new Redis({ host: 'localhost', port: 6379 });
const subClient = pubClient.duplicate();
const io = new Server(server);
io.adapter(RedisAdapter(pubClient, subClient));

Při použití Kubernetes nebo Docker Swarm se doporučuje dodatečně nakonfigurovat session affinity (sticky sessions), aby požadavky od stejného klienta směřovaly na stejný server, jinak se může při každém znovupřipojení změnit přiřazení.

Často kladené otázky

Čím se Socket.IO liší od nativního WebSocket?

Socket.IO poskytuje událostní model s pojmenovanými událostmi, automatické znovupřipojení, podporu místností a fallback na HTTP long-polling. Nativní WebSocket je nízkoúrovňový protokol s minimálním API vyžadujícím ruční implementaci těchto mechanismů.

Lze Socket.IO použít bez Node.js?

Ano, existují implementace třetích stran serverové části pro Python (python-socketio), Java (netty-socketio), Go (go-socketio) a další jazyky. Klient socket.io-client je k dispozici pro JavaScript, Swift, Kotlin a C++.

Kolik současných připojení SocketIO zvládne?

Jeden proces Node.js se Socket.IO zpracovává až 100 000 připojení s 1 GB RAM. S Redis adaptérem a 4 servery cluster zvládne až 400 000 současných klientů.

Podporuje Socket.IO mobilní platformy?

Ano, pro iOS je k dispozici oficiální klient ve Swift, pro Android — v Java/Kotlin. Pro React Native se používá standardní JavaScript klient socket.io-client.

Jak zajistit bezpečnost Socket.IO připojení?

Používejte HTTPS/WSS místo HTTP/WS, nakonfigurujte middleware pro autentizaci pomocí tokenů (JWT), nastavte omezení odchozích událostí pomocí validátorů a použijte rate limiting pro ochranu proti DDoS.

Shrnutí

  • Socket.IO — knihovna pro obousměrnou komunikaci v reálném čase, postavená na WebSocket s automatickým fallbackem na HTTP long-polling.
  • Událostní model s pojmenovanými událostmi a ACK potvrzeními zjednodušuje vývoj oproti nativnímu WebSocket.
  • Místnosti a jmenné prostory umožňují seskupování klientů a izolaci logických komunikačních kanálů.
  • Automatické znovupřipojení s exponenciálním zpožděním zajišťuje stabilitu v mobilních sítích.
  • Horizontální škálování je realizováno prostřednictvím Redis nebo MongoDB adaptérů bez změny kódu aplikace.
  • Adaptéry řeší problém sdílení stavu mezi procesy pomocí Pub/Sub brokerů.
  • Pro jednoduché projekty s minimálními transportními požadavky zvolte nativní WebSocket, pro produkční systémy se spolehlivostí — Socket.IO.

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é