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