Angular 有没有办法知道rxjs websocket是否已打开

Angular 有没有办法知道rxjs websocket是否已打开,angular,websocket,rxjs,rxjs5,Angular,Websocket,Rxjs,Rxjs5,我在angular 4项目中使用RxJS 我正在尝试启动一个Websocket,尤其是想知道这个Websocket何时被打开 我目前正在使用RxJS(v5)的WebSocket。 我注意到WebSocketSubjectConfig中有一个openObserver,但我找不到如何创建该观察者。我已经被锁了好几个小时了 以下是我迄今为止的代码摘录: import { Injectable } from '@angular/core'; import { webSocket} from 'rxjs

我在angular 4项目中使用RxJS

我正在尝试启动一个Websocket,尤其是想知道这个Websocket何时被打开

我目前正在使用RxJS(v5)的WebSocket。

我注意到WebSocketSubjectConfig中有一个openObserver,但我找不到如何创建该观察者。我已经被锁了好几个小时了

以下是我迄今为止的代码摘录:

import { Injectable } from '@angular/core';
import { webSocket} from 'rxjs/observable/dom/webSocket';
import { WebSocketSubject, WebSocketSubjectConfig} from 'rxjs/observable/dom/WebSocketSubject';

@Injectable()
export class MzkWebsocketJsonRpcService {
    subject: WebSocketSubject<any>;
    jsonRpcId: number;

    constructor() {

        this.subject = webSocket('ws://localhost:12345');
        this.subject.openObserver =
            /// Find a way to create the openObserver


        this.subject.subscribe(
            this.onMessage,
            this.onError,
            this.onClose,
        );
        console.log('Socket connected');
        this.jsonRpcId = 1;
    }

    public send(method: string, params: any[]) {

        let jsonFrame: any = {id: this.jsonRpcId, 'json-rpc': '2.0', method: method};

        if (params) {
            jsonFrame['params'] = params;
        }
        this.subject.next(JSON.stringify(jsonFrame));
        this.jsonRpcId ++;
    }

    onMessage(data: string) {
        console.log('Websocket message: ', data);
    }

    onError(data: string) {
        console.log('Websocket error:', data);
    }

    onClose() {
        console.log('Websocket closing');
    }
}
从'@angular/core'导入{Injectable};
从'rxjs/observable/dom/webSocket'导入{webSocket};
从'rxjs/observable/dom/WebSocketSubject'导入{WebSocketSubject,WebSocketSubjectConfig};
@可注射()
导出类MzkWebsocketJsonRpcService{
主题:WebSocketSubject;
jsonRpcId:编号;
构造函数(){
this.subject=webSocket('ws://localhost:12345');
this.subject.openObserver=
///找到一种创建openObserver的方法
这个。主题。订阅(
这个.onMessage,
这是一个错误,
这是一次失败,
);
log('套接字连接');
this.jsonRpcId=1;
}
公共发送(方法:字符串,参数:任意[]){
让jsonFrame:any={id:this.jsonRpcId,'json-rpc':'2.0',method:method};
如果(参数){
jsonFrame['params']=params;
}
this.subject.next(JSON.stringify(jsonFrame));
this.jsonRpcId++;
}
onMessage(数据:字符串){
log('Websocket消息:',数据);
}
OneError(数据:字符串){
log('Websocket错误:',数据);
}
onClose(){
console.log(“Websocket关闭”);
}
}

观察者可以是至少部分实现了
观察者
接口的任何对象。看

这意味着您可以编写一个自定义类:

MyObserver implements Observer {
  next(value: any): void {
    ...
  }
  complete(): void {
    ...
  }
}

let socket = new WebSocketSubject({
  url: 'ws://localhost:8081',
  openObserver: new MyObserver()
});
最后,对于
WebSocketSubject
的情况,您可以使其更加简单,只使用
next
方法创建对象,因为
openObserver
需要使用
NextObserver
接口创建对象


谢谢!!你让我开心:)
let socket = new WebSocketSubject({
  url: 'ws://localhost:8081',
  openObserver: {
    next: (val: any) => {
      console.log('opened');
    }
  }
});