gpt4 book ai didi

angular - Websocket onmessage 事件只触发一次

转载 作者:搜寻专家 更新时间:2023-10-30 21:48:10 46 4
gpt4 key购买 nike

我在 Angular 6 应用程序中使用基本的 WebSocket 客户端。

除某些原因外,一切正常发送到客户端(正确的消息显示在浏览器控制台的 websocket 连接框架中)。所有其他事件正常工作。

这是我使用 websockets 的类(class):

export class WebsocketService  implements OnDestroy {
socket: WebSocket;

constructor(@Inject(APP_CONFIG) private config: IAppConfig, private authService: AuthService) { }

initConnection(): void {
this.socket = new WebSocket(
this.config.apiEndpoint.replace(/^https?:\/\//i, 'ws://') + 'ws/');
this.watchEvent(WSEvent.ERROR).subscribe(data => {
console.log(data);
});
}

watchEvent(wsevent: WSEvent): Observable<any> {
return new Observable(observer => {
this.socket.addEventListener(wsevent, function (event) {
observer.next(event);
});
});
}

onMessage(): Observable<any> {
return new Observable(observer => {
this.socket.onmessage = function (event) {
observer.next(event);
};
});
}

ngOnDestroy() {
// this.socket.close();
}
}

事件:

export enum WSEvent {
CLOSE = 'close',
OPEN = 'open',
MESSAGE = 'message',
ERROR = 'error'
}

用法:

this.wsService.watchEvent('message').subscribe((data) => {
console.log(data);
});


this.wsService.onMessage().subscribe((data) => {
console.log(data);
});

在这两种情况下,console.log(data); 只显示发送给客户端的第一条消息。消息被发送多少次并不重要,消息的内容 - onmessage(指的是两个选项)只被触发一次。

更新:更新了这篇文章以包含实际工作的解决方案(问题是我在 observer.next(event); 之后立即调用了 observer.complete(); 它做了它应该做的做)

最佳答案

必须从观察者中删除 observer.complete();

关于angular - Websocket onmessage 事件只触发一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51006024/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com