【问题标题】:How to unsubscribe socket io in Angular如何在Angular中取消订阅socket io
【发布时间】:2022-02-16 17:08:13
【问题描述】:

这就是我使用套接字 io 将客户端连接到服务器的方式。

export class OverviewService {

  socket:any;
  readonly uri:string='http://localhost:4000';

  

  constructor(private http: HttpClient) {
    this.socket = io(this.uri);
   }

当我打电话时这个

getOnPeak(){
    this.socket.emit('on_peak/today');

    return new Observable((subscriber)=>{
      this.socket.on('on_peak/today',(data:any)=>{
        subscriber.next(data.onPeak.toFixed(2))
        console.log('onPeak:'+data.onPeak.toFixed(2));
      })
    })
    
  }

overview.ts

this.getOnPeekSub=this.overviewService.getOnPeak().subscribe(onPeak => {
      this.onPeak = onPeak;
    })

ngOnDestroy 上我尝试使用 removeAllListeners()、removeListeners() 和 off() 但它不起作用。

【问题讨论】:

标签: javascript angular typescript socket.io


【解决方案1】:
getOnPeak(){
    this.socket.emit('on_peak/today');

    return new Observable((subscriber)=>{
      this.socket.on('on_peak/today',(data:any)=>{
        subscriber.next(data.onPeak.toFixed(2))
        console.log('onPeak:'+data.onPeak.toFixed(2));
      })

      return function unsubscribe() {
        this.socket.disconnect()
      };
    })
    
  }

当您取消订阅 Observalbe 时,套接字将被关闭。 在此处阅读更多信息https://rxjs.dev/guide/observable(处理 Observable 执行)

【讨论】:

  • 感谢您的回答,但它没有解决问题。这是我的后端代码 socket.on('on_peak/today', (message) => { setInterval(async () => { console.log('on_peak/today') socket.emit('on_peak/today', await onPeakToday()); }, 3000); }); 这就是为什么当我重新启动时客户端总是发出使屏幕变红。这会使堆内存不足。如何解决?
猜你喜欢
  • 1970-01-01
  • 2016-07-29
  • 2019-06-12
  • 1970-01-01
  • 2023-01-04
  • 1970-01-01
  • 2018-04-19
  • 2021-11-18
  • 1970-01-01
相关资源
最近更新 更多