I want to implement clusterization in my NestJs and SocketIo app, and for this like I understand I must implement an Adapter(I had choose Redis Streams) and sticky sessions.I get stuck with clusterization and sticky sessions.How should I implement these sticky sessions?
I have implemented the redis streams adapter looks like this:
import { IoAdapter } from '@nestjs/platform-socket.io/adapters';
import { ServerOptions } from 'socket.io';
import { RedisClientType, createClient } from 'redis';
import { createAdapter } from '@socket.io/redis-streams-adapter';
import { Server } from 'socket.io';
import { ConfigService } from '@nestjs/config';
import { IRedisConfig } from 'src/common/interfaces/redis.config.interface';
import { Logger } from '@nestjs/common';
export class RedisStreamsAdapter extends IoAdapter {
private redisClient: RedisClientType;
private readonly logger = new Logger(RedisStreamsAdapter.name);
constructor(private configService: ConfigService) {
super(configService);
}
async connectRedis() {
await this.redisClient.connect();
}
createIOServer(port: number, options?: ServerOptions): any {
const redisCofig = this.configService.get<IRedisConfig>('redisConfig');
this.redisClient = createClient({
url: `redis://:${redisCofig.password}@${redisCofig.host}:${redisCofig.port}`,
});
const server: Server = super.createIOServer(port, options);
this.connectRedis()
.then(() => {
const redisAdapter = createAdapter(this.redisClient);
server.adapter(redisAdapter);
})
.catch((error) => {
this.logger.error(error, error.stack);
});
return server;
}
}
and I use it in main.ts file app.useWebSocketAdapter(new RedisStreamsAdapter(configService));
New contributor
Vasile Bubuioc is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.