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: 和原生 WebSocket 比? A: 原生 WebSocket 更轻,但需要自己实现重连、心跳、rooms。Socket.IO 开箱即用。
Q: 怎么水平扩展?
A: 用 @socket.io/redis-adapter。多个 Node 进程共享 Redis pub/sub 广播。
Q: 协议兼容吗? A: 客户端和服务端版本需兼容(v4 客户端不能连 v2 服务端)。官方有版本对照表。
来源与致谢 Sources
- Docs: https://socket.io/docs
- GitHub: https://github.com/socketio/socket.io
- License: MIT