What Socket.IO Does
- Events — emit/on with any JSON payload
- Acknowledgments — callback-style confirmations
- Rooms — group sockets for targeted broadcasts
- Namespaces — logical channels over same connection
- Auto-reconnect — exponential backoff
- Binary data — Buffers/Blobs supported
- Horizontal scaling — Redis adapter for multi-node
- Middleware — auth, logging, rate limiting
Architecture
The Engine.IO layer handles transport (WebSocket preferred, polling fallback, upgrade mechanism). Socket.IO adds protocol features (rooms, acks, binary, namespaces). Multi-server deploys use a Redis (or other) adapter to broadcast across nodes.
Self-Hosting
# Standalone Node server
node server.js
# With Express
import express from "express";
import { Server } from "socket.io";
import http from "http";
const app = express();
const httpServer = http.createServer(app);
const io = new Server(httpServer);
httpServer.listen(3000);Key Features
- WebSocket + HTTP long-polling fallback
- Automatic reconnection
- Rooms and namespaces
- Acknowledgments (callback-style)
- Binary data support
- Horizontal scaling via adapters
- Middleware for auth
- Admin UI dashboard
- Multiple language clients (JS, Python, Java, Swift, Kotlin, C++)
Comparison
| Library | Transport | Fallback | Rooms | Scaling |
|---|---|---|---|---|
| Socket.IO | WebSocket + HTTP | Yes | Built-in | Redis adapter |
| ws | WebSocket | No | DIY | DIY |
| SockJS | WebSocket + 8 fallbacks | Yes | No | DIY |
| Centrifugo | WebSocket | No | Built-in | Built-in |
| Ably/Pusher | WebSocket | Yes | Built-in | Managed SaaS |
FAQ
Q: How does it compare to native WebSocket? A: Native WebSocket is lighter, but you have to implement reconnection, heartbeats, and rooms yourself. Socket.IO provides all that out of the box.
Q: How do I scale horizontally?
A: Use @socket.io/redis-adapter. Multiple Node processes share broadcasts through Redis pub/sub.
Q: Are protocols compatible across versions? A: Client and server versions must match (a v4 client can't connect to a v2 server). There's an official version compatibility table.
Sources & Credits
- Docs: https://socket.io/docs
- GitHub: https://github.com/socketio/socket.io
- License: MIT