微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

嵌套 js websocket 连接不适用于 angular 11

如何解决嵌套 js websocket 连接不适用于 angular 11

创建了一个嵌套的 js websocket 并尝试从 angular 应用程序版本 11 连接到它。无法从 angular 11 连接到套接字。我使用的是最新版本的 socket.io-client。

在 websocket 服务器日志中显示连接和断开连接。

嵌套 js websocket 文件

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

import { EventPattern } from '@nestjs/microservices';

@WebSocketGateway(3001)

export class AppGateway implements OnGatewayInit,OnGatewayConnection,OnGatewaydisconnect{
    private Logger = new Logger('AppGateway');

    afterInit(server: Server) {
        this.Logger.log("App Gateway Initialized");
    }

    handleConnection(client: Socket,...args: any[]){
        this.Logger.log(`New client connected...: ${client.id}`);
        client.emit('connected','Successfully connected to the server.');
    }

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

    @SubscribeMessage('msgToServer')
    handleMessage(client:Socket,text:string):WsResponse<string> {
        this.Logger.log(`got new event`);
        return {event: 'msgToClient','data': text};
    }
}

angular websocket 服务文件

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { io } from 'socket.io-client';

@Injectable({
  providedIn: 'root'
})
export class WebSocketService {

  socket: any;

  constructor() {
    this.socket = io('http://localhost:3001');
    debugger;

    this.socket.on('connected',function() {
        console.log("connected !");
    });

  }

  listen(eventName: string) {
    return new Observable((subscriber) => {
      this.socket.on(eventName,(data) => {
        subscriber.next(data);
      })
    });
  }

  emit(eventName: string,data:any) {
    this.socket.emit(eventName,data);
  }
}

angular app.component.ts 文件

import { Component,OnInit } from '@angular/core';
import { WebSocketService } from './web-socket.service';


@Component({
  selector: 'app-root',templateUrl: './app.component.html',styleUrls: ['./app.component.css'],})
export class AppComponent implements OnInit{
  title = 'dashboard';


  constructor(
    private webSocketService: WebSocketService
  ) {}

  ngOnInit() {
    /*this.webSocketService.listen('msgToClient').subscribe((data) => {
      console.log(data);
    })*/

    this.webSocketService.listen('connected').subscribe((data) => {
      console.log(data);
    })
  }
}

解决方法

我使用的是最新版本的 socket.io-client。

我相信您使用的是 socketIO 客户端 v4。 (如果您使用的是 v3,以下内容仍然成立)

基于NestJS Websocket documentation,NestJS socketIO服务器仍为v2。

@nestjs/platform-socket.io 目前依赖于 socket.io v2.3,socket.io v3.0 客户端和服务器不向后兼容。但是,您仍然可以实现自定义适配器以使用 socket.io v3.0。请参阅此问题以获取更多信息。

如果您选中 version compatibility,您将看到 socketIO 服务器 v2 与 socketIO 客户端 v4 不兼容。

然而,socketIO 服务器 v3 与 socketIO 客户端 v4 兼容。因此,我相信您可以查看 this issue (如 NestJS 文档中所述)并尝试将您的 NestJS socketIO 服务器转换为支持 socketIO 客户端 v3。希望这也能支持 socketIO 客户端 v4。 (不过我没有测试过!)

希望对你有帮助。干杯? !!!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?