ArcherGu / fast-vite-nestjs-electron

Vite + Vue + Electron + Nestjs with esbuild, crazy fast! ⚡
MIT License
300 stars 31 forks source link

我应该如何正确使用此模板开启一个可用的websocket服务 #804

Closed eamd-wq closed 3 weeks ago

eamd-wq commented 3 weeks ago

我的需要让Electron客户端和chrome中的网页进行通讯,想要采用websocket的方式,于是我根据nestjs官网的流程操作 https://docs.nestjs.com/websockets/gateways

本地可以看到我启动的端口 但是只有0.0.0.0段的 image

我通过websocket在线工具进行连接,提示连接失败(通过js demo也无法连接,服务端貌似没有收到任何反应),在线websocket工具:https://wstool.js.org

我的demo:https://github.com/eamd-wq/fast-nest-electron-demo

关键代码

base.gateway.ts

import type { Socket } from 'socket.io'

import { BusinessEvents } from './business-event.constant'

export abstract class BaseGateway {
  public gatewayMessageFormat(
    type: BusinessEvents,
    message: any,
    code?: number,
  ) {
    return {
      type,
      data: message,
      code,
    }
  }

  handleDisconnect(client: Socket) {
    client.send(
      this.gatewayMessageFormat(BusinessEvents.GATEWAY_CONNECT, 'WebSocket 断开'),
    )
  }

  handleConnection(client: Socket) {
    client.send(
      this.gatewayMessageFormat(BusinessEvents.GATEWAY_CONNECT, 'WebSocket 已连接'),
    )
  }
}

browser.getawsy.ts

import type { GatewayMetadata, OnGatewayConnection, OnGatewayDisconnect, OnGatewayInit } from '@nestjs/websockets'
import { SubscribeMessage, WebSocketGateway, WebSocketServer } from '@nestjs/websockets'
import type { Namespace, Socket } from 'socket.io'
import { BaseGateway } from '../base.gateway'

@WebSocketGateway<GatewayMetadata>(1191, { namespace: '/browser', transports: ['websocket'] })
export class BrowserGateway extends BaseGateway implements OnGatewayConnection, OnGatewayDisconnect, OnGatewayInit {
  @WebSocketServer() protected namespace: Namespace

  afterInit() {
    // console.log('websocket init')
  }

  handleConnection(client: Socket) {
    // console.log('client connected')
    super.handleConnection(client)
  }

  handleDisconnect(client: Socket): void {
    // console.log('client disconnected')
    super.handleDisconnect(client)
  }

  @SubscribeMessage('page')
  async page(/* client: Socket, message: string */) {
    // console.log('message', message)
  }
}
eamd-wq commented 3 weeks ago

我不清楚是不是网段的问题,使用异常过滤器也没有收到任何回应,实在没有了排查的思路; afterInit方法可以正常执行并且没有报错 image

ArcherGu commented 3 weeks ago

你先试试在一个普通nest.js环境中按照它的文档去集成socket.io的websocket试试,如果那边你都没法做到,那说明你本身在nest.js集成websocket就已经操作错误了。

eamd-wq commented 3 weeks ago

我用普通nestjs模板按照官方文档集成了websocket,但是仍然连接不到,也没有任何报错,我现在没有丝毫头绪;大佬有没有做过相关的,或者能否帮忙提供一个成功的demo让我参考一下,非常感激

eamd-wq commented 3 weeks ago

解决了 喵的 socket.io服务只能通过socket.io-client来连接和交互