The Socket.IO Redis emitter

The @socket.io/redis-emitter
package allows you to easily communicate with a group of Socket.IO servers from another Node.js process (server-side).

The emitter is also available in other programming languages:
It must be used in conjunction with @socket.io/redis-adapter
.
The current version is compatible with both:
socket.io-redis@5
(socket.io@2
)socket.io-redis@6
(socket.io@3
& socket.io@4
)
Table of content
How to use
CommonJS
Installation: npm i @socket.io/redis-emitter redis
const { Emitter } = require("@socket.io/redis-emitter");
const { createClient } = require("redis");
const redisClient = createClient();
const io = new Emitter(redisClient);
setInterval(() => {
io.emit("time", new Date);
}, 5000);
TypeScript
Installation: npm i @socket.io/redis-emitter redis @types/redis
import { Emitter } from "@socket.io/redis-emitter";
import { createClient } from "redis";
const redisClient = createClient();
const io = new Emitter(redisClient);
setInterval(() => {
io.emit("time", new Date);
}, 5000);
With typed events:
import { Emitter } from ".";
import { createClient } from "redis";
interface Events {
basicEmit: (a: number, b: string, c: number[]) => void;
}
const redisClient = createClient();
const io = new Emitter<Events>(redisClient);
io.emit("basicEmit", 1, "2", [3]);
Emit cheatsheet
const { Emitter } = require("@socket.io/redis-emitter");
const { createClient } = require("redis");
const redisClient = createClient();
const io = new Emitter(redisClient);
io.emit();
io.to("room1").emit();
io.to("room1").except("room2").emit();
io.to(socketId).emit();
const nsp = io.of("/admin");
nsp.emit();
nsp.to("notifications").emit();
Note: acknowledgements are not supported
API
Emitter(client[, opts])
client
is a node_redis
compatible client that has been initialized with the return_buffers
option set to true
.
The following options are allowed:
key
: the name of the key to pub/sub events on as prefix (socket.io
)
Emitter#to(room:String):BroadcastOperator
Emitter#in(room:String):BroadcastOperator
Specifies a specific room
that you want to emit to.
Emitter#except(room:String):BroadcastOperator
Specifies a specific room
that you want to exclude from broadcasting.
Emitter#of(namespace:String):Emitter
Specifies a specific namespace that you want to emit to.
Emitter#socketsJoin(rooms:String|String[])
Makes the matching socket instances join the specified rooms:
io.socketsJoin("room1");
io.of("/admin").in("room1").socketsJoin("room2");
Emitter#socketsLeave(rooms:String|String[])
Makes the matching socket instances leave the specified rooms:
io.socketsLeave("room1");
io.of("/admin").in("room1").socketsLeave("room2");
Emitter#disconnectSockets(close:boolean)
Makes the matching socket instances disconnect:
io.disconnectSockets();
io.of("/admin").in("room1").disconnectSockets();
io.of("/admin").in(theSocketId).disconnectSockets();
License
MIT