Websocket 您如何指定一个返回可观察的API?
一个可观察的——一个随时间变化的集合——是能够通过web请求的有用的东西。feed最好建模为一个可观察的数组,而不是一个静态数组,您必须轮询并区分请求 我的问题是——如果我想创建一个web端点,它可以让您这样做Websocket 您如何指定一个返回可观察的API?,websocket,rxjs,observable,reactive-programming,Websocket,Rxjs,Observable,Reactive Programming,一个可观察的——一个随时间变化的集合——是能够通过web请求的有用的东西。feed最好建模为一个可观察的数组,而不是一个静态数组,您必须轮询并区分请求 我的问题是——如果我想创建一个web端点,它可以让您这样做 web-tail -f http://somewhere.com/biz-quotes 该服务由一个虚构的实用工具webtail查询,每5秒钟将返回一个新的简洁的业务报价,如“CustomDepartmentSynergy”。我可以用WebSocket编写这样一个Webtail实用程序
web-tail -f http://somewhere.com/biz-quotes
该服务由一个虚构的实用工具webtail
查询,每5秒钟将返回一个新的简洁的业务报价,如“CustomDepartmentSynergy”。我可以用WebSocket编写这样一个Webtail
实用程序,并为将发射到控制台的发射对象字段建立约定。但是,我应该用什么语言编写可消费规范呢
可观察的规范是否足够成熟以供参考?如果您的目标是编写一个客户端,该客户端使用服务器通过WebSocket发送的消息,那么您肯定可以在socket.io之上使用RxJs 解释了这是如何工作的 简而言之,这就是您需要的TypeScript代码
import { Observable } from 'rxjs';
import { Subject } from 'rxjs';
import { Observer } from 'rxjs';
import * as socketIoClient from 'socket.io-client';
export class SocketObs {
private socket: SocketIOClient.Socket;
private connect = new Subject<any>();
private disconnect = new Subject<any>();
constructor(url: string);
constructor(input: any) {
this.socket = socketIoClient(input);
this.socket.on('connect',
() => {
this.connect.next();
// complete to make sure that this event is fired only once
this.connect.complete();
}
);
this.socket.on('disconnect',
() => {
this.disconnect.next();
// complete to make sure that this event is fired only once
this.disconnect.complete();
}
);
}
send(event, message?) {
this.socket.emit(event, message);
}
onEvent(event): Observable<any> {
return new Observable<any>((observer: Observer<any>) => {
this.socket.on(event, data => observer.next(data));
});
}
onDisconnect() {
return this.disconnect.asObservable();
}
onConnect() {
return this.connect.asObservable();
}
close() {
this.socket.close();
}
}
从'rxjs'导入{Observable};
从'rxjs'导入{Subject};
从'rxjs'导入{Observer};
从“socket.io客户端”导入*作为socketIoClient;
出口级SocketObs{
私有套接字:SocketIOClient.socket;
私有连接=新主题();
private disconnect=新主题();
构造函数(url:string);
构造函数(输入:任意){
this.socket=socketIoClient(输入);
this.socket.on('connect',
() => {
this.connect.next();
//完成以确保此事件仅触发一次
this.connect.complete();
}
);
this.socket.on('disconnect',
() => {
this.disconnect.next();
//完成以确保此事件仅触发一次
这是.disconnect.complete();
}
);
}
发送(事件、消息?){
this.socket.emit(事件、消息);
}
OneEvent(事件):可观察{
返回新的可观察对象((观察者:观察者)=>{
this.socket.on(事件,数据=>observer.next(数据));
});
}
onDisconnect(){
返回这个.disconnect.asObservable();
}
onConnect(){
返回此.connect.asObservable();
}
关闭(){
this.socket.close();
}
}
SocketObs类以Observable的形式为您提供了所需的API,特别是
OneEvent
返回一个Observable,它会在从服务器接收到某个事件时发出。消耗品规范,您指的是如何使用Observable编写客户端库?很好的答案和链接。非常感谢!