Javascript 如何使用fromWebSocket主题缓冲流
这(用!)完美地描述了期望的结果: 在突发期间收集缓冲区中的项目,并在每次突发结束时发出这些项目,方法是使用解盎司运算符向缓冲区运算符发出缓冲区关闭指示器 编辑:回顾之后,我的问题似乎与使用主题有关,而不是直接观察到的主题 使用套接字流生成窗口关闭事件(如下所示)会导致2个套接字打开,而没有事件流出:Javascript 如何使用fromWebSocket主题缓冲流,javascript,reactive-programming,rxjs,Javascript,Reactive Programming,Rxjs,这(用!)完美地描述了期望的结果: 在突发期间收集缓冲区中的项目,并在每次突发结束时发出这些项目,方法是使用解盎司运算符向缓冲区运算符发出缓冲区关闭指示器 编辑:回顾之后,我的问题似乎与使用主题有关,而不是直接观察到的主题 使用套接字流生成窗口关闭事件(如下所示)会导致2个套接字打开,而没有事件流出: ws = Rx.DOM.fromWebSocket(wsURI, null, wsOpenObserver, wsCloseObserver); var closer = ws.flatMapFi
ws = Rx.DOM.fromWebSocket(wsURI, null, wsOpenObserver, wsCloseObserver);
var closer = ws.flatMapFirst(Rx.Observable.timer(250));
ws.buffer(closer)
.subscribe(function(e) { console.log(e, 'socket messages');});
与RxJava版本一样,您可以将一个
可观察的
直接传递给缓冲区
操作符:
source.buffer(source.debounce(150))
这是有效的。看
您展示的使用选择器方法的替代语法将在每次缓冲区关闭时调用该方法,然后订阅它生成的可观察对象
另外,RxJava示例中的解块正在发送缓冲区运算符的结果,默认情况下它不会发送累积结果。总结此处的发现问题:
返回环绕websocket的Rx.DOM.fromWebSocket
。该主体由一个观察者和一个可观察者组成(通过Rx.subject
。据我所知,该观察者允许通过其new Rx.subject(observer,observable)
方法写入套接字,而可观察者允许从套接字读取onNext
- 你总是读到受试者是热源,但显然在这里,这只意味着观察者会立即将其值推送到受试者,而受试者会将其推送到套接字。在正常情况下(
),默认的观察者和可观察者是这样的:可观察者监听观察者,因此默认的可观察者是热的。然而,在这里,可观察者是冷源,然后任何订阅都将重新执行回调,创建另一个websocket。因此创建了两个套接字new Rx.subject()
- 例如,
不会发生这种情况,因为创建的(冷)可观察对象是共享的(通过Rx.dom.fromEvent
)publish().refCount()
- 因此,通过在此处执行相同操作,可以解决复制问题。这意味着在这种特定情况下,在代码中使用
,ws=Rx.DOM.fromWebSocket(wsURI,null,wsOpenObserver,wsCloseObserver).share();
作为share
publish().refCount()的别名
- 我想知道
的这种行为是否应该被报告为bugRx.DOM.fromWebSocket
.share()
添加到ws
中。希望只创建一个套接字。然后点击ws查看发出了什么,例如wsRx.DOM.fromWebSocket(wsURI,null,wsOpenObserver,wsCloseObserver)。点击(*log\u fn*).share()
。您能在这里包括实际的解决方法吗,例如source=Rx.DOM.fromWebSocket(wsURI,null,wsOpenObserver,wsCloseObserver).share()