Redis adapter for Socket.IO that enables broadcasting packets between multiple Socket.IO servers through Redis pub/sub functionality
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
The Socket.IO Redis adapter enables broadcasting packets between multiple Socket.IO servers through Redis pub/sub functionality. It provides comprehensive Redis integration with support for both regular Redis and Redis clusters, using either the 'redis' or 'ioredis' client libraries.
npm install @socket.io/redis-adapterimport { createAdapter, createShardedAdapter } from "@socket.io/redis-adapter";Default import (equivalent to createAdapter):
import createAdapter from "@socket.io/redis-adapter";For CommonJS:
const { createAdapter, createShardedAdapter } = require("@socket.io/redis-adapter");
// or
const createAdapter = require("@socket.io/redis-adapter");import { createClient } from "redis";
import { Server } from "socket.io";
import { createAdapter } from "@socket.io/redis-adapter";
// Create Redis clients
const pubClient = createClient({ url: "redis://localhost:6379" });
const subClient = pubClient.duplicate();
await Promise.all([
pubClient.connect(),
subClient.connect()
]);
// Create Socket.IO server with Redis adapter
const io = new Server({
adapter: createAdapter(pubClient, subClient)
});
io.listen(3000);The Redis adapter is built around several key components:
RedisAdapter class for standard Redis pub/sub operationsShardedRedisAdapter class utilizing Redis 7.0+ sharded pub/sub featuresredis and ioredis client librariesStandard Redis adapter implementation using traditional pub/sub channels. Supports broadcasting, socket management, and inter-server communication.
function createAdapter(
pubClient: any,
subClient: any,
opts?: Partial<RedisAdapterOptions>
): (nsp: any) => RedisAdapter;
interface RedisAdapterOptions {
key: string;
requestsTimeout: number;
publishOnSpecificResponseChannel: boolean;
parser: Parser;
}Advanced adapter implementation using Redis 7.0+ sharded pub/sub features for improved scalability.
function createShardedAdapter(
pubClient: any,
subClient: any,
opts?: ShardedRedisAdapterOptions
): (nsp: any) => ShardedRedisAdapter;
interface ShardedRedisAdapterOptions {
channelPrefix?: string;
subscriptionMode?: "static" | "dynamic" | "dynamic-private";
}Cross-client compatibility utilities for Redis operations and binary data handling.
function hasBinary(obj: any, toJSON?: boolean): boolean;
function SSUBSCRIBE(
redisClient: any,
channel: string,
handler: (rawMessage: Buffer, channel: Buffer) => void
): void;
function SUNSUBSCRIBE(redisClient: any, channel: string | string[]): void;
function SPUBLISH(
redisClient: any,
channel: string,
payload: string | Uint8Array
): Promise<any>;
function PUBSUB(redisClient: any, arg: string, channel: string): Promise<number>;
function parseNumSubResponse(res: any[]): number;
function sumValues(values: number[]): number;interface Parser {
decode(msg: any): any;
encode(msg: any): any;
}