CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-socket-io--redis-adapter

Redis adapter for Socket.IO that enables broadcasting packets between multiple Socket.IO servers through Redis pub/sub functionality

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

index.mddocs/

Socket.IO Redis Adapter

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.

Package Information

  • Package Name: @socket.io/redis-adapter
  • Package Type: npm
  • Language: TypeScript
  • Installation: npm install @socket.io/redis-adapter

Core Imports

import { 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");

Basic Usage

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);

Architecture

The Redis adapter is built around several key components:

  • Regular Adapter: RedisAdapter class for standard Redis pub/sub operations
  • Sharded Adapter: ShardedRedisAdapter class utilizing Redis 7.0+ sharded pub/sub features
  • Multi-Client Support: Compatible with both redis and ioredis client libraries
  • Cluster Support: Handles both standalone Redis and Redis cluster configurations
  • Inter-Server Communication: Manages request/response patterns between Socket.IO servers
  • Message Parsing: Configurable message encoding/decoding with binary data support

Capabilities

Regular Redis Adapter

Standard 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;
}

Regular Redis Adapter

Sharded Redis Adapter

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";
}

Sharded Redis Adapter

Utility Functions

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;

Utility Functions

Types

interface Parser {
  decode(msg: any): any;
  encode(msg: any): any;
}

docs

index.md

regular-adapter.md

sharded-adapter.md

utilities.md

tile.json