【问题标题】:use rxjs to create an observable that will be connected to a web socket later使用 rxjs 创建一个稍后将连接到 web 套接字的 observable
【发布时间】:2016-04-21 03:18:06
【问题描述】:

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

我希望我的模块(观察者)从“服务器消息”模块(服务,..)中获得一个可观察的,甚至在用户通过身份验证之前。 基本上没有什么是可观察的。

这个“服务器消息”服务抽象出 web-socket 创建的细节并返回一个基于 socket 的 observable。

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

当套接字存在时,onNext.. 的观察者将被调用,在此之前什么都不会被调用。

在伪代码和概念代码中:

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

【问题讨论】:

  • 您的问题似乎表明缺乏对该主题的研究。请阅读stackoverflow.com/help/how-to-ask,然后google rxjs websocket,然后将rxjs websocket 放在SO 上的搜索框中。然后,如果您仍然没有找到您要查找的内容,请返回一个特定问题,并可能包含您尝试过的一些代码。

标签: javascript websocket rxjs observable mediator


【解决方案1】:

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

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

使用这种技术,客户端代码可以在连接建立之前订阅可观察对象。

【讨论】:

    猜你喜欢
    • 2018-12-13
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多