将角度5中的WebSocket与Rxjs observable和observer重新连接
无论如何,如果我的应用程序与WebSocket断开连接,我将无法重新连接它。我附上示例代码,请建议我如何重新连接WebSocket并再次在WebSocket服务器上初始化我的身份 我在本教程的帮助下完成了申请 我已经在我的应用程序中编写了相同的代码,除了我的应用程序要求 我遵循的教程没有在任何情况下重新连接WebSocket的功能,例如internet中断或由于某种原因,我们的WebSocket服务器重新启动,因为我正在使用SupervisorD运行我的WebSocket服务器,如果WebSocket服务器在任何情况下停止,它将自动重新启动 我的应用程序正在生产中,许多客户现在正在使用,因此我无法在该应用程序中更改所有流并重新创建WebSocket的代码 我正在添加我正在使用的所有代码 websocket.service.ts将角度5中的WebSocket与Rxjs observable和observer重新连接,websocket,rxjs,angular5,Websocket,Rxjs,Angular5,无论如何,如果我的应用程序与WebSocket断开连接,我将无法重新连接它。我附上示例代码,请建议我如何重新连接WebSocket并再次在WebSocket服务器上初始化我的身份 我在本教程的帮助下完成了申请 我已经在我的应用程序中编写了相同的代码,除了我的应用程序要求 我遵循的教程没有在任何情况下重新连接WebSocket的功能,例如internet中断或由于某种原因,我们的WebSocket服务器重新启动,因为我正在使用SupervisorD运行我的WebSocket服务器,如果WebSo
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)
});
}