Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when building real-time communication systems with WebSockets or Socket.IO. Invoke for bidirectional messaging, horizontal scaling with Redis, presence tracking, room management.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | -1% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 111% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 63% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 51% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 62% | 0% |
npx wscat -c ws://localhost:3000); confirm auth rejection on missing/invalid tokens, room join/leave events, and message deliveryLoad detailed guidance based on context:
| Topic | Reference | Load When | |-------|-----------|-----------| | Protocol | references/protocol.md | WebSocket handshake, frames, ping/pong, close codes | | Scaling | references/scaling.md | Horizontal scaling, Redis pub/sub, sticky sessions | | Patterns | references/patterns.md | Rooms, namespaces, broadcasting, acknowledgments | | Security | references/security.md | Authentication, authorization, rate limiting, CORS | | Alternatives | references/alternatives.md | SSE, long polling, when to choose WebSockets |
jsimport { createServer } from "http"; import { Server } from "socket.io"; import { createAdapter } from "@socket.io/redis-adapter"; import { createClient } from "redis"; import jwt from "jsonwebtoken"; const httpServer = createServer(); const io = new Server(httpServer, { cors: { origin: process.env.ALLOWED_ORIGIN, credentials: true }, pingTimeout: 20000, pingInterval: 25000, }); // Authentication middleware — runs before connection is established io.use((socket, next) => { const token = socket.handshake.auth.token; if (!token) return next(new Error("Authentication required")); try { socket.data.user = jwt.verify(token, process.env.JWT_SECRET); next(); } catch { next(new Error("Invalid token")); } }); // Redis adapter for horizontal scaling const pubClient = createClient({ url: process.env.REDIS_URL }); const subClient = pubClient.duplicate(); await Promise.all([pubClient.connect(), subClient.connect()]); io.adapter(createAdapter(pubClient, subClient)); io.on("connection", (socket) => { const { userId } = socket.data.user; console.log(`connected: ${userId} (${socket.id})`); // Presence: mark user online pubClient.hSet("presence", userId, socket.id); socket.on("join-room", (roomId) => { socket.join(roomId); socket.to(roomId).emit("user-joined", { userId }); }); socket.on("message", ({ roomId, text }) => { io.to(roomId).emit("message", { userId, text, ts: Date.now() }); }); socket.on("disconnect", () => { pubClient.hDel("presence", userId); console.log(`disconnected: ${userId}`); }); }); httpServer.listen(3000);
jsimport { io } from "socket.io-client"; const socket = io("wss://api.example.com", { auth: { token: getAuthToken() }, reconnection: true, reconnectionAttempts: 10, reconnectionDelay: 1000, // initial delay (ms) reconnectionDelayMax: 30000, // cap at 30 s randomizationFactor: 0.5, // jitter to avoid thundering herd }); // Queue messages while disconnected let messageQueue = []; socket.on("connect", () => { console.log("connected:", socket.id); // Flush queued messages messageQueue.forEach((msg) => socket.emit("message", msg)); messageQueue = []; }); socket.on("disconnect", (reason) => { console.warn("disconnected:", reason); if (reason === "io server disconnect") socket.connect(); // manual reconnect }); socket.on("connect_error", (err) => { console.error("connection error:", err.message); }); function sendMessage(roomId, text) { const msg = { roomId, text }; if (socket.connected) { socket.emit("message", msg); } else { messageQueue.push(msg); // buffer until reconnected } }
When implementing WebSocket features, provide:
Socket.IO, ws, uWebSockets.js, Redis adapter, sticky sessions, nginx WebSocket proxy, JWT over WebSocket, rooms/namespaces, acknowledgments, binary data, compression, heartbeat, backpressure, horizontal pod autoscaling
Other measured skills in the registry, with their headline benchmark lift.