使用rxjs创建一个可观察的对象,该对象稍后将连接到web套接字

use rxjs to create an observable that will be connected to a web socket later

本文关键字:对象 连接 套接字 web 创建 rxjs 观察 一个 使用      更新时间:2023-09-26

我正在做一个web项目。当用户通过身份验证时,会创建一个web套接字(服务器只接受经过身份验证的用户)。

我希望我的模块(观察者)能够从"服务器消息传递"模块(服务,..)中获得可观察的信息,甚至在用户通过身份验证之前。基本上,还没有任何东西在可观察的背后。

这个"服务器消息传递"服务抽象出web套接字创建的细节,并返回基于套接字的可观察结果。

问题是,我如何创建一个基于套接字的可观察对象(稍后创建/懒惰)。

当套接字出现时,请在Next上。。在那之前,将不召集任何观察员。

在伪代码和仅概念代码中:

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

您可以使用AsyncSubject和mergeAll的组合,在建立套接字连接之前,从消息服务中"发布"可观察到的内容。类似这样的东西:

// 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();
}

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