angular - 如何在超时值后阻止角度 websocket 连接打开
问题描述
我正在使用角度 websocket 连接从服务器发送和接收数据。当我尝试打开 websocket 连接时,有时需要超过 10 秒才能打开连接。如果连接尚未打开,我需要在 10 秒后停止打开连接。然后我应该能够停止当前连接并通知客户端连接终止。我不能使用 websocket.close() 方法,因为连接尚未打开。有没有其他方法可以终止连接打开请求?我使用的示例代码如下:
const ws = new WebSocket(url);
setTimeout(() => {
if (ws.readyState == 0) {
// Need some code here to terminate connection request
}
}, 5000);
我的 websocket.service.ts 代码如下:
import { Injectable } from '@angular/core';
import * as Rx from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class WebsocketService {
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> {
const ws = new WebSocket(url);
setTimeout(() => {
if (ws.readyState == 0) {
}
}, 5000);
const 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);
});
const observer = {
next: (data: Object) => {
if (ws.readyState === WebSocket.OPEN) {
ws.send(JSON.stringify(data));
}
}
};
return Rx.Subject.create(observer, observable);
}
}
解决方案
推荐阅读
- java - AWS Cognito 用户设备触发器
- trains - 火车:我可以重置任务的状态吗?(从“中止”回到“正在运行”)
- javascript - DAC银行贷款自动化
- ios - 在本地化中改变事物。选项卡栏控制器选择索引引发 NSInternalInconsistencyException
- javascript - 将信息从 Laravel 后端发送到 React 前端,而无需先从前端发出请求
- android - m3u 文件无法从 Xtream 下载并在 IPTV 应用程序中实现
- go - Go 程序内存消耗在 Windows Server 2016 上不断增加
- java - 无法在 android studio 中解析符号 v7 和 appComapat Activity 导入
- php - 如何将包含空格的字符串作为参数传递给查询的 where 子句
- javascript - 你如何阅读和理解这个位移代码?