У меня есть приложение на основе ngrx/store (v2.2.2) и rxjs (v5.1.0), которое слушает веб-сокет для входящих данных с помощью наблюдаемого. Когда я запускаю приложение, я получаю поступающие данные безупречно.
Однако через некоторое время (обновления появляются довольно редко) соединение, похоже, затеряется, и я не получаю больше входящих данных. Мой код:
Сервис
import { Injectable, OnInit } from '@angular/core';
import { Observable } from 'rxjs';
@Injectable()
export class MemberService implements OnInit {
private websocket: any;
private destination: string = "wss://notessensei.mybluemix.net/ws/time";
constructor() { }
ngOnInit() { }
listenToTheSocket(): Observable<any> {
this.websocket = new WebSocket(this.destination);
this.websocket.onopen = () => {
console.log("WebService Connected to " + this.destination);
}
return Observable.create(observer => {
this.websocket.onmessage = (evt) => {
observer.next(evt);
};
})
.map(res => res.data)
.share();
}
}
Абонент
export class AppComponent implements OnInit {
constructor(/*private store: Store<fromRoot.State>,*/ private memberService: MemberService) {}
ngOnInit() {
this.memberService.listenToTheSocket().subscribe((result: any) => {
try {
console.log(result);
// const member: any = JSON.parse(result);
// this.store.dispatch(new MemberActions.AddMember(member));
} catch (ex) {
console.log(JSON.stringify(ex));
}
})
}
}
Что мне нужно сделать, чтобы повторно подключить веб-сокет, когда он истечет, поэтому наблюдаемый продолжает выдавать входящие значения?
Я посмотрел на некоторые Q & A здесь, здесь и здесь, и он, похоже, не рассматривал этот вопрос (каким-то образом я мог бы понять).
Примечание: websocket в wss://notessensei.mybluemix.net/ws/time
является живым и генерирует отметку времени один раз в минуту (в случае, если кто-то хочет проверить это).
Совет приветствуется!