我有一个服务类(Ang 8+),该服务类通过使用rxjs/webSocket()
工厂管理websocket的创建:
@Injectable({
providedIn: 'root',
})
export class WebSocketChannel {
//................
create(url?: string): Observable<WebSocketPackage<any>> {
this.wsSubj = webSocket<WebSocketPackage<any>>(this.channelUrl);
this.wsSubj.pipe(
retryWhen(errors =>
errors.pipe(
tap(err => {
console.error('Websocket error', err);
}),
delay(1000),
),
),
)
.subscribe(
ok => console.log('ok'),
ko => console.log('ko'),
);
return this.wsSubj;
}
还有一个在其ngOnInit方法中消耗wsSubj
成员的组件:
ngOnInit() {
this.wsManager.create();
this.wsManager.wsSubj
.subscribe(
data => {
console.log('HomeComponent WS OK');
},
err => {
console.log('HomeComponent WS ERROR CATCH');
},
() => console.log('complete')
);
}
这是一些服务器停止/启动后的console.logs:
// Websocket服务器已启动
websocket-manager.ts:好的
component.ts:HomeComponent WS OK
// Websocket服务器关闭
component.ts:HomeComponent WS错误捕获
websocket-manager.ts:“ Websocket错误”
// Websocket服务器已启动
websocket-manager.ts:好的
// Websocket服务器关闭
websocket-manager.ts:“ Websocket错误”
总而言之,在第一次“服务器宕机”事件之后,不再有发射到达组件,但是websocket-manager内的订阅仍然运行良好。
为什么?为了在第一次故障事件发生后到达组件,我该怎么做?