你怎么能指定一个返回Observables的API?

时间:2018-06-13 23:54:35

标签: websocket rxjs observable reactive-programming

Observable - 随着时间的推移 - 是一个有用的东西,能够通过网络请求。 Feed最好建模为Observable,而不是必须轮询和差异请求的静态数组。

我的问题 - 如果我想创建一个可以让你做的网络端点

web-tail -f http://somewhere.com/biz-quotes

这个由虚构的实用程序web-tail查询的服务每隔5秒就会返回一个像“自定义部门协同作用”这样的精简商业报价。我可以用WebSockets编写这样一个web-tail实用程序,并建立一个约定,用于将发射对象的哪个字段发送到控制台。但是我会用什么语言编写耗材规范呢?

Observable规范是否足够成熟以供引用?

1 个答案:

答案 0 :(得分:1)

如果您的目标是编写一个消费服务器通过websockets发送的消息的客户端,您肯定可以使用 RxJs ,例如 socket.io

This nice article向您解释这是如何运作的。

简而言之,这是您需要的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();
    }
}

SocketObs类以Observable的形式为您提供所需的API,特别是onEvent返回一个Observable,它会在从服务器收到某个事件时发出。