Websocket 您如何指定一个返回可观察的API?

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请求的有用的东西。feed最好建模为一个可观察的数组,而不是一个静态数组,您必须轮询并区分请求

我的问题是——如果我想创建一个web端点,它可以让您这样做

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编写客户端库?很好的答案和链接。非常感谢!