使用rxjs创建一个稍后将连接到Web套接字的observable

时间:2016-04-21 03:18:06

标签: javascript websocket rxjs observable mediator

我正在开展一个网络项目。用户通过身份验证时会创建一个Web套接字(服务器只接受经过身份验证的用户)。

即使在用户通过身份验证之前,我希望我的模块(观察者)能够从'server-messaging'模块(service,..)获得一个observable。 基本上没有什么是可观察的背后。

这种“服务器消息传递”服务抽象出Web套接字创建的细节,并根据套接字返回一个observable。

问题是我如何创建一个基于套接字的observable(稍后创建/懒惰)。

当套接字出现时,将调用onNext ..观察者,之后不会调用任何内容。

在伪和仅概念代码中:

//interested observer.js
messagingService.observable.subscribe(observer);
...
// user is authneticated, messagingservice.js
this.observervable.onmessage = socket.onmessage;

1 个答案:

答案 0 :(得分:0)

您可以使用AsyncSubjectmergeAll的组合在发出套接字连接之前从消息传递服务中“发布”observable。像这样:

// messagingService.js

// will be given the observable from the socket when
// it is ready
var socketSubject = new Rx.AsyncSubject();

// call flatMap to flatten the observable of observable into
// just an observable of messages
messagingService.observable = socketSubject.mergeAll();

// make the connection
messagingService.makeConnection = function(args) {
    var messageObservable = // ...

    // give the messageObservable to the socketSubject
    socketSubject.onNext(messageObservable);
    socketSubject.onComplete();
}

使用这种技术,客户端代码可以在连接之前订阅可观察的