将角度5中的WebSocket与Rxjs observable和observer重新连接

将角度5中的WebSocket与Rxjs observable和observer重新连接,websocket,rxjs,angular5,Websocket,Rxjs,Angular5,无论如何,如果我的应用程序与WebSocket断开连接,我将无法重新连接它。我附上示例代码,请建议我如何重新连接WebSocket并再次在WebSocket服务器上初始化我的身份 我在本教程的帮助下完成了申请 我已经在我的应用程序中编写了相同的代码,除了我的应用程序要求 我遵循的教程没有在任何情况下重新连接WebSocket的功能,例如internet中断或由于某种原因,我们的WebSocket服务器重新启动,因为我正在使用SupervisorD运行我的WebSocket服务器,如果WebSo

无论如何,如果我的应用程序与WebSocket断开连接,我将无法重新连接它。我附上示例代码,请建议我如何重新连接WebSocket并再次在WebSocket服务器上初始化我的身份

我在本教程的帮助下完成了申请

我已经在我的应用程序中编写了相同的代码,除了我的应用程序要求

我遵循的教程没有在任何情况下重新连接WebSocket的功能,例如internet中断或由于某种原因,我们的WebSocket服务器重新启动,因为我正在使用SupervisorD运行我的WebSocket服务器,如果WebSocket服务器在任何情况下停止,它将自动重新启动

我的应用程序正在生产中,许多客户现在正在使用,因此我无法在该应用程序中更改所有流并重新创建WebSocket的代码

我正在添加我正在使用的所有代码

websocket.service.ts

import { Injectable } from '@angular/core';
import * as Rx from 'rxjs/Rx';

@Injectable()
export class WebsocketService {
  connected: boolean = false;
  initialized: boolean= false;
  constructor() { }

  private subject: Rx.Subject<MessageEvent>;

  public connect(url): Rx.Subject<MessageEvent> {
   if (!this.subject) {
    this.subject = this.create(url);
    // console.log("Successfully connected: " + url);
   }
   return this.subject;
  }

  private create(url): Rx.Subject<MessageEvent> {
    let ws = new WebSocket(url);

   // here i am trying to reconnect my websocket
   // setInterval (function () {
   //   if (ws.readyState !== 1) {
   //     ws = new WebSocket(url);
   //     this.initialized = false;
   //   }
   //   console.log(this.initialized);
   //   if (ws.readyState == 1 && this.initialized == false) {
   //     ws.send('{"type":"add", 
    "t":"14bfa6xxx", "from_numbers": 
    ["xxxx","xxxxx"], "platform":"xxxx"}');
     //     this.initialized = true;
   //   }

   //   console.log(this.initialized);
   // }, 4000);
    let observable = Rx.Observable.create(
     (obs: Rx.Observer<MessageEvent>) => {
      ws.onmessage = obs.next.bind(obs);
      ws.onerror = obs.error.bind(obs);
     ws.onclose = obs.complete.bind(obs);
      return ws.close.bind(ws);
     })
    let observer = {
    next: (data: Object) => {
     if (ws.readyState === WebSocket.OPEN) {
      if (data['type'] == 'add') {
        console.log("Connection Initialized");
        }
        ws.send(JSON.stringify(data));
      }
    }
    }
    return Rx.Subject.create(observer, observable);
   }

   }
import { Injectable } from '@angular/core';
import { Observable, Subject } from 'rxjs/Rx';
import { WebsocketService } from './websocket.service';

@Injectable()
export class ChatService {
  public messages: Subject<Message>;

  constructor(wsService: WebsocketService, private authService: AuthService) {
    this.messages = <Subject<Message>>wsService
      .connect(socket_url)
      .map((response: MessageEvent): Message => {
        const data = JSON.parse(response.data);
        console.log(data);
        return data;
      });
  }
}
constructor(private chatService: ChatService,) {
    this.socketMessages();
}

socketMessages() {
    this.chatService.messages.subscribe(msg => {
      console.log(msg)
    });
  }