nestJS“socket.io-redis":“6.0.1"; [英] nestJS "socket.io-redis": "6.0.1"

查看:115
本文介绍了nestJS“socket.io-redis":“6.0.1";的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

根据文档打字稿//npm i -D @types/redis

import { Server } from 'socket.io';从 'socket.io-redis' 导入 { createAdapter };从'redis'导入{RedisClient};const io = 新服务器(8080);const pubClient = new RedisClient({ host: 'localhost', port: 6379 });const subClient = pubClient.duplicate();io.adapter(createAdapter({ pubClient, subClient }));

我创建了 redis 适配器

import { IoAdapter } from '@nestjs/platform-socket.io';从 'socket.io-redis' 导入 { createAdapter };从'redis'导入{RedisClient};导出类 RedisIoAdapter 扩展 IoAdapter {createIOServer(port: number, options?: any): any {const server = super.createIOServer(port, options);const pubClient = new RedisClient({ host: 'localhost', port: 6379 });const subClient = pubClient.duplicate();server.adapter(createAdapter({ pubClient, subClient }));返回服务器;}}

在我使用 dispatch this.appGateway.server.emit('test', 'hello'); 之后

TypeError: 回调不是函数在 Encoder.encode (/home/test/node_modules/socket.io-parser/index.js:135:5)在 RedisAdapter.broadcast (/home/test/node_modules/socket.io-redis/node_modules/socket.io-adapter/dist/index.js:102:45)在 RedisAdapter.broadcast (/home/test/node_modules/socket.io-redis/dist/index.js:267:15)在 Namespace.emit (/home/test/node_modules/socket.io/lib/namespace.js:234:16)在服务器上<计算>[作为发射] (/home/test/node_modules/socket.io/lib/index.js:505:29)

我的网关

import { OnGatewayConnection, WebSocketGateway, WebSocketServer } from '@nestjs/websockets';从'@nestjs/common'导入{记录器};@WebSocketGateway()导出类 AppGateway 实现 OnGatewayConnection {私有只读记录器 = 新记录器(AppGateway.name);@WebSocketServer()服务器;句柄连接(客户端):任何{this.logger.log('新用户连接...');client.emit('connection', '连接成功');}}

帮助解决问题

解决方案

socket.io-redis ^6 使用 Nest 尚不支持的 socket.io 版本 3.在此处有一个未解决的问题,它已准备好用于 Nest v8>

according to the documentation TypeScript // npm i -D @types/redis

import { Server } from 'socket.io';
import { createAdapter } from 'socket.io-redis';
import { RedisClient } from 'redis';

const io = new Server(8080);
const pubClient = new RedisClient({ host: 'localhost', port: 6379 });
const subClient = pubClient.duplicate();

io.adapter(createAdapter({ pubClient, subClient }));

I create redis adapter

import { IoAdapter } from '@nestjs/platform-socket.io';
import { createAdapter } from 'socket.io-redis';
import { RedisClient } from 'redis';

export class RedisIoAdapter extends IoAdapter {
  createIOServer(port: number, options?: any): any {
    const server = super.createIOServer(port, options);
    const pubClient = new RedisClient({ host: 'localhost', port: 6379 });
    const subClient = pubClient.duplicate();
    server.adapter(createAdapter({ pubClient, subClient }));
    return server;
  }
}

after i use dispatch this.appGateway.server.emit('test', 'hello');

TypeError: callback is not a function
    at Encoder.encode (/home/test/node_modules/socket.io-parser/index.js:135:5)
    at RedisAdapter.broadcast (/home/test/node_modules/socket.io-redis/node_modules/socket.io-adapter/dist/index.js:102:45)
    at RedisAdapter.broadcast (/home/test/node_modules/socket.io-redis/dist/index.js:267:15)
    at Namespace.emit (/home/test/node_modules/socket.io/lib/namespace.js:234:16)
    at Server.<computed> [as emit] (/home/test/node_modules/socket.io/lib/index.js:505:29)

my gateWay

import { OnGatewayConnection,  WebSocketGateway, WebSocketServer } from '@nestjs/websockets';
import { Logger } from '@nestjs/common';

@WebSocketGateway()
export class AppGateway implements OnGatewayConnection {
  private readonly logger = new Logger(AppGateway.name);

  @WebSocketServer()
  server;
  
  handleConnection(client): any {
    this.logger.log('new user connected...');
    client.emit('connection', 'Succesfuly connected');
  }

}

help please solve the problem

解决方案

socket.io-redis ^6 uses socket.io version 3 which is not yet supported by Nest. There's an open issue about it here and it's set to be ready for Nest v8

这篇关于nestJS“socket.io-redis":“6.0.1";的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆