socket.io 集群版

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: socket.io 集群版

实现原理

官方已经给出了解决方案,就是 WebsocketsAdapters ,参加官方文档


注意

前端也要针对性的修改,要配置 transports: ['websocket'] 或者后台在负载层面支持 cookie


安装依赖

$ pnpm add redis socket.io @socket.io/redis-adapter @nestjs/platform-socket.io @nestjs/websockets点击复制复制失败已复制


编写适配器

建立适配器文件 redis-io.adapter.ts ,写入如下内容:

import { NestExpressApplication } from '@nestjs/platform-express';
import { IoAdapter } from '@nestjs/platform-socket.io';
import { ConfigType } from '@nestjs/config';
import { createAdapter } from '@socket.io/redis-adapter';
import { ServerOptions } from 'socket.io';
import { createClient } from 'redis';
import { RedisConfigRegister } from '../../config/registers/redis.register';
/** socket.io redis 适配器 */
export class RedisIoAdapter extends IoAdapter {
  constructor(private readonly app: NestExpressApplication, private readonly redisConfig: ConfigType<typeof RedisConfigRegister>) {
    super(app);
  }
  private adapterConstructor: ReturnType<typeof createAdapter>;
  async connectToRedis(): Promise<void> {
    const pubClient = createClient({ url: `redis://c194a9eg<!-- begin-inline-katex{this.redisConfig.common.host}:end-inline-katex-->{this.redisConfig.common.port}` });
    const subClient = pubClient.duplicate();
    await Promise.all([pubClient.connect(), subClient.connect()]);
    this.adapterConstructor = createAdapter(pubClient, subClient);
  }
  createIOServer(port: number, options?: ServerOptions): any {
    const server = super.createIOServer(port, options);
    server.adapter(this.adapterConstructor);
    return server;
  }
}点击复制复制失败已复制


使用

main.ts 文件中配置,具体参考如下:

const app = await NestFactory.create(AppModule);
// socket.io redis 适配器
const redisIoAdapter = new RedisIoAdapter(app, redisConfig);
await redisIoAdapter.connectToRedis();
app.useWebSocketAdapter(redisIoAdapter);
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
缓存 Linux Apache
网络IO和磁盘IO详解
1. 缓存IO          缓存I/O又被称作标准I/O,大多数文件系统的默认I/O操作都是缓存I/O。在Linux的缓存I/O机制中,数据先从磁盘复制到内核空间的缓冲区,然后从内核空间缓冲区复制到应用程序的地址空间。
4610 0
|
1月前
|
Java 数据处理
IO实例一
IO实例一
28 5
|
1月前
|
Java
IO实例二
IO实例二
19 3
|
2月前
|
JavaScript
socket.io
socket.io
19 0
|
3月前
|
网络协议 Linux
2.1.1网络io与io多路复用select/poll/epoll
2.1.1网络io与io多路复用select/poll/epoll
|
3月前
|
监控 NoSQL Linux
网络IO管理 - 多路复用IO
网络IO管理 - 多路复用IO
|
3月前
|
网络协议 Java Linux
socket IO端口复用
socket IO端口复用
|
5月前
网络IO 之 reactor
网络IO 之 reactor
|
8月前
|
存储 设计模式 Java
IO 流超级详细讲解
IO 流超级详细讲解
40 0
|
9月前
|
存储 Linux 文件存储
基础IO详解(一)
基础IO详解
75 0