AngularWebsocket在调用send()后立即关闭。
创始人
2024-10-29 22:30:24
0

此问题可能是由于在Angular应用程序中使用Websocket时使用了RxJS的Subject而引起的。在Websocket的observable中使用Subject时,它可能会在执行一次完整的数据发送过程后立即关闭。

为了解决这个问题,需要在引用Subject时加上share()操作符,这将使得Subject可否缓存数据并在所有订阅者之间共享。

以下是更详细的例子:

import { Injectable } from '@angular/core'; import { Observable, Observer, Subject } from 'rxjs'; import { share } from 'rxjs/operators'; import { environment } from 'environments/environment';

@Injectable() export class SocketService { // 缓存Subject public messages: Subject;

// 获取WebSocket的URl public initWebSocket(): void { const socketUrl: string = environment.wsUrl; this.messages = this.createWebSocketObserver(socketUrl).pipe(share()) as Subject; }

// 创建一个Websocket的可观察对象 private createWebSocketObserver(url: string): Observable { return new Observable((observer: Observer) => { const socket = new WebSocket(url);

  socket.onmessage = (event) => observer.next(event);
  socket.onerror = (event) => observer.error(event);
  socket.onclose = (event) => observer.complete();

  // 返回Subscription以确保在不需要时执行清理操作
  return () => socket.close();
});

} }

希望这可以帮助你解决这个问题!

相关内容

热门资讯

透视苹果版!aapoker脚本... 透视苹果版!aapoker脚本(透视)发牌逻辑(竟然存在有挂)1、这是跨平台的aapoker脚本黑科...
透视游戏!aapoker透视脚... 透视游戏!aapoker透视脚本(透视)脚本(竟然是真的有挂)1、很好的工具软件,可以解锁游戏的aa...
透视线上!aapoker怎么开... 透视线上!aapoker怎么开辅助器(透视)辅助(都是是有挂)1、玩家可以在aapoker怎么开辅助...
透视中牌率!aapoker怎么... 透视中牌率!aapoker怎么选牌(透视)真的假的(果然存在有挂)1、实时aapoker怎么选牌开挂...
透视黑科技!aapoker免费... 透视黑科技!aapoker免费透视脚本(透视)透视脚本(竟然是真的有挂)1、点击下载安装,aapok...
辅助透视!aapoker怎么提... 辅助透视!aapoker怎么提高中牌率(透视)插件下载(本来真的是有挂)1、aapoker怎么提高中...
透视了解!aapoker辅助软... 透视了解!aapoker辅助软件合法吗(透视)脚本(原来真的是有挂)1、任何aapoker辅助软件合...
透视工具!aapoker辅助器... 透视工具!aapoker辅助器怎么用(透视)透视脚本入口(真是真的是有挂);1、aapoker辅助器...
透视app!aapoker辅助... 透视app!aapoker辅助怎么用(透视)辅助(一贯存在有挂)1、aapoker辅助怎么用系统规律...
透视辅助!aapoker俱乐部... 透视辅助!aapoker俱乐部靠谱吗(透视)插件(本来真的有挂)aapoker俱乐部靠谱吗辅助器中分...