【发布时间】:2021-05-23 00:43:27
【问题描述】:
我一直在尝试使用 this 教程使用 angular 和 nestjs 测试 websocket。
这是我的 Nestjs 项目的网关。
import {
SubscribeMessage,
WebSocketGateway,
WebSocketServer,
WsResponse,
MessageBody
} from '@nestjs/websockets';
import { Server } from 'socket.io';
@WebSocketGateway(3001)
export class EventsGateway {
@WebSocketServer()
server: Server;
@SubscribeMessage('message')
handleMessage(@MessageBody() data: any): WsResponse<string> {
return { event: 'response', data: data };
}
@SubscribeMessage('broadcast')
broadcast(@MessageBody() data: any): void {
this.server.emit('broadcast', 'response')
}
}
这是我的 Angular 项目中的服务。
import { Injectable } from '@angular/core';
import { io } from 'socket.io-client';
import { Observable } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class WebsocketService {
private url = 'http://localhost:3001';
private socket;
connect() {
this.socket = io(this.url);
}
emit(emitName: string, data?) {
this.socket.emit(emitName, data);
}
on(onName: string) {
let observable = new Observable(observer => {
this.socket.on(onName, (data) => {
observer.next(data);
});
return () => { this.socket.disconnect(); };
});
return observable;
}
}
但是,结果不是我所期望的。客户端无法检索 websocket 数据。 你可以克隆我的仓库here。
请帮忙!
【问题讨论】:
-
查看您的依赖项,可能是 socket.io 版本不匹配。 Nest(至少在 v8 之前)只支持 socket.io v2,而在客户端你有 socket.io-client v3,它使用 socket.iov3 引擎。这两个引擎不兼容。有一个未解决的问题,并计划在下一个主要版本中修复
-
@JayMcDoniel 可能是这样。因为我在 Angular 上也有同样的症状。我现在使用了 2 年的非打字 socket.io 代码,它的工作就像这个问题无关紧要。但是,NPM 应该帮助我们选择正确的版本,但它没有。 ??????
标签: angular websocket socket.io nestjs