首页 > 解决方案 > 如何在超时值后阻止角度 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);
    }
}

标签: angularwebsocketangular6

解决方案


推荐阅读