node.js - 从 NextJS 到 Node 后端的套接字连接

标签 node.js websocket socket.io next.js nestjs

我正在尝试实现从 NextJS 客户端(在 localhost:3000 上运行)到 NestJs 服务器(在 localhost:3003 上运行)的基本套接字连接。

服务器代码如下所示

ChatGateway.ts

import {
  SubscribeMessage,
  WebSocketGateway,
  OnGatewayInit,
  WebSocketServer,
  OnGatewayConnection,
  OnGatewayDisconnect,
} from '@nestjs/websockets';
import {
  Logger
} from '@nestjs/common';
import {
  Socket,
  Server
} from 'socket.io';

@WebSocketGateway()
export class ChatGateway implements OnGatewayInit, OnGatewayConnection, OnGatewayDisconnect {

  @WebSocketServer() server: Server;
  private logger: Logger = new Logger('ChatGateway');

  @SubscribeMessage('msgToServer')
  handleMessage(client: Socket, payload: string): void {
    console.log(payload);
    this.server.emit('msgToClient', payload);
  }


  afterInit(server: Server) {
    this.logger.log('Init');
  }

  handleDisconnect(client: Socket) {
    this.logger.log(`Client disconnected: ${client.id}`);
  }

  handleConnection(client: Socket, ...args: any[]) {
    this.logger.log(`Client connected: ${client.id}`);
    this.server.emit('msgToClient', "payload");
  }
}

ChatModule.ts

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ChatGateway } from "./chat.gateway";


@Module({
  imports: [],
  controllers: [],
  providers: [ChatGateway],
})
export class ChatModule {}

AppModule.ts

@Module({
  imports: [TypeOrmModule.forRoot(), NewsletterModule, AuthModule, UsersModule, ListingsModule, ChatModule]
})
export class AppModule {
  constructor(private connection: Connection) {}

但是当我尝试从客户端连接到套接字时

import {
  io
} from "socket.io-client";



function Chat() {
  const socket = io("http://127.0.0.1:3003");

  useEffect(() => {
    console.log("chat useEffect")
    socket.emit('msgToServer', "message")
  }, [])
  socket.on('msgToClient', (message) => {
    console.log(message)
  })

我没有收到任何错误,但当我发出或尝试从服务器接收事件时也没有发生任何事情。

即使服务器控制台也不记录发出事件。服务器上发生的唯一事情是客户端一直连接和断开连接,甚至我都没有做任何事情

enter image description here

知道为什么我无法连接到套接字以及为什么即使我从客户端禁用套接字连接,服务器也会不断连接和断开连接。

谢谢!

最佳答案

Socket.io 客户端需要是版本 2。版本 3 和 4 是重大更改,并且不与 v2 服务器通信。一旦 Nest v8 上线,将默认使用 socket.io v4。

关于node.js - 从 NextJS 到 Node 后端的套接字连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67035266/

相关文章:

javascript - 如何使用 Passport 保护路由端点?

javascript - 在 javascript 中读取 html 复选框

javascript - 从客户端到服务器的 SocketIO 回调不起作用(改为空对象)

javascript - 发出的事件是否会产生大量负载,即使它们没有被监视?

ruby-on-rails - 在 Heroku 上的同一个应用程序中的 Rails 和 Node?

javascript - 异步链接模式

node.js - 如何使用 webpack 通过 node-sass 和 sass-loader 引用项目的根文件夹

angularjs - 如何监听 sails.io.js 上的套接字发出的信号?

javascript - websockets ws.on 和 ws.onmessage 之间的区别

node.js - 在node.js中打开套接字时发送数据