加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何在角度5的一定时间后防止websocket关闭?

发布时间:2020-12-17 17:30:01 所属栏目:安全 来源:网络整理
导读:我使用’rxjs-websockets’来连接websockets.但经过一段时间(约2分钟) 连接关闭.在手动关闭之前,如何保持连接. 这是我使用的代码片段 constructor(private socketService: WebSocketService) {}this.socketService.connect('/endpoint');this.socketSubscrip
我使用’rxjs-websockets’来连接websockets.但经过一段时间(约2分钟)
连接关闭.在手动关闭之前,如何保持连接.

这是我使用的代码片段

constructor(private socketService: WebSocketService) {}

this.socketService.connect('/endpoint');
this.socketSubscription = this.socketService.messages
      .subscribe(result => {            
            // perform operation
    });

这是WebSocketService

import {Injectable} from '@angular/core';
import {QueueingSubject} from 'queueing-subject';
import {Observable} from 'rxjs/Observable';
import websocketConnect from 'rxjs-websockets';
import 'rxjs/add/operator/share';
import 'rxjs/add/operator/retryWhen';
import 'rxjs/add/operator/delay';

@Injectable()
export class WebSocketService {
  private inputStream: QueueingSubject<string>;
  public messages: Observable<string>;

  constructor() {    
  }

  public connect(socketUrl) {
      this.messages = websocketConnect(
        socketUrl,this.inputStream = new QueueingSubject<string>()
      ).messages.retryWhen(errors => errors.delay(1000))
        .map(message => JSON.parse(message))
        .share();
  }

  public send(message: string): void {
    this.inputStream.next(message);
  }
}

解决方法

Websockets通常在一些消息交换的帮助下长时间保持连接.
在我们的例子中,我们可以将其称为’ping => pong’,客户端发送消息’ping’,服务器可能会回复消息’pong’.

您可以按如下方式每30秒发送一次ping.

setInterval(() => {
    this.socketService.send('ping');
},30000);

当您将WebSocketService收到的每条消息转换为JSON时,您必须进行这些更改
avaoid JSON解析错误.

export class WebSocketService {
.
.
.

    public connect(socketUrl) {
      this.messages = websocketConnect(
        socketUrl,this.inputStream = new QueueingSubject<string>()
      ).messages.retryWhen(errors => errors.delay(1000))
        //parse messages except pong to avoid JSON parsing error
        .map(message => message === 'pong' ? message : JSON.parse(message))
        .share();
    }
.
.
.
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读