使用 rxjs 创建一个稍后将连接到网络套接字的可观察对象
use rxjs to create an observable that will be connected to a web socket later
我正在做一个网络项目。当用户通过身份验证时创建一个网络套接字(服务器只接受经过身份验证的用户)。
我希望我的模块(观察者)从 'server-messaging' 模块(服务,..)获得一个可观察对象,甚至在用户通过身份验证之前。
基本上还没有什么可以观察到的。
此 'server-messaging' 服务抽象出网络套接字创建的细节和 returns 基于套接字的可观察对象。
问题是我如何创建一个基于套接字的可观察对象(待创建 later/lazy)。
当套接字存在时,将调用观察者的onNext..,在此之前不会调用任何东西。
在伪概念代码中:
//interested observer.js
messagingService.observable.subscribe(observer);
...
// user is authneticated, messagingservice.js
this.observervable.onmessage = socket.onmessage;
您可以使用 AsyncSubject and mergeAll 的组合来本质上 "publish" 在建立套接字连接之前从消息服务中观察到的。像这样:
// 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();
}
使用此技术,客户端代码可以在建立连接之前订阅可观察对象。
我正在做一个网络项目。当用户通过身份验证时创建一个网络套接字(服务器只接受经过身份验证的用户)。
我希望我的模块(观察者)从 'server-messaging' 模块(服务,..)获得一个可观察对象,甚至在用户通过身份验证之前。 基本上还没有什么可以观察到的。
此 'server-messaging' 服务抽象出网络套接字创建的细节和 returns 基于套接字的可观察对象。
问题是我如何创建一个基于套接字的可观察对象(待创建 later/lazy)。
当套接字存在时,将调用观察者的onNext..,在此之前不会调用任何东西。
在伪概念代码中:
//interested observer.js
messagingService.observable.subscribe(observer);
...
// user is authneticated, messagingservice.js
this.observervable.onmessage = socket.onmessage;
您可以使用 AsyncSubject and mergeAll 的组合来本质上 "publish" 在建立套接字连接之前从消息服务中观察到的。像这样:
// 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();
}
使用此技术,客户端代码可以在建立连接之前订阅可观察对象。