我正嘗試創建一個使用websockets的應用程序,但我正在運行可怕的「多重連接」問題,每次頁面重新加載而不是關閉時重新打開一個新的websocket,另一個連接只是簡單地添加到列表中。我的問題是,如果有人知道從Angular 2/4 +關閉Socket.io websocket的最佳方式。如何關閉Angular 2/4 +和Socket.io中的websocket
這裏就是我有儘可能代碼:
service.ts
getUserSocket(userID: string): Observable<any> {
return new Observable(_Observer => {
// Setup the socket namespace subscription
this.UserSocket = io(NTC_API_URL + `/user/${userID}`, { secure: true });
this.UserSocket.on('message', _Message => {
console.log(_Message);
})
})
}
closeUserSocket() {
this.UserSocket.disconnect();
this.UserSocket.close();
}
component.ts
ngOninit() {
// Setup the User Socket
this.UserSocket = this._UsersService.getUserSocket(this.currentUser.userID)
.subscribe(_UserSocketMessage => {
console.log(_UserSocketMessage);
})
}
ngOnDestroy() {
this.UserSocket.unsubscribe();
this._UsersService.closeUserSocket();
}
這似乎並不奏效的我仍然可以通過登錄已確認電話的應用程序來觀看連接是要銷燬的組件。
另一種選擇我試圖用的是once
聽衆,而不是on
監聽器,它可以工作,但我不確定的副作用,並已看過一些地方,它不是一定是不關閉的連接,我可以修復理解。
的'.disconnect'方法應與一個布爾值指示是否要關閉底層連接被調用。所以你應該嘗試調用'.disconnect(true)'。參考:https://stackoverflow.com/a/31349392/5619416 –
你確定嗎?我的intellisense尖叫着我,因爲disconnect()方法不帶任何參數。 – joshrathke
啊,我想你是參考一個'server'方法而不是'client'方法。客戶端正在Angular上使用。 – joshrathke