or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

index.mdregular-adapter.mdsharded-adapter.mdutilities.md
tile.json

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

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
npmpkg:npm/@socket.io/redis-adapter@8.3.x

To install, run

npx @tessl/cli install tessl/npm-socket-io--redis-adapter@8.3.0

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