【发布时间】:2015-02-25 18:01:03
【问题描述】:
我将编写伪代码以避免不必要的样板。我是 Rx 的新手,但我真的很想使用它而不是 Features 和类似的东西......
这是交易引擎的简化模型
我们有一个提供人们可能感兴趣的所有事件流(可观察对象),例如
market.updateStream // stream of orderbook update events
我们有所谓的 s,它们将订阅所需的流并在发生任何变化时“做出反应”
market.updateStream.subscribe(bot1.marketUpdateAction)
market.updateStream.subscribe(bot2.marketUpdateAction)
我们可能有许多机器人将订阅一个市场,每个机器人要么开始计算要么忽略更改事件。
现在我们有 N 个机器人对 1 个事件做出反应,我们需要有人比较他们的计算并决定哪一个是最有利可图的,如果某个机器人正在减速并且超出我们准备等待的时间限制,我们跳过它并继续进行比较和执行......为此我们有一个 botController 订阅了所有机器人事件,以便它知道机器人何时决定对事件做出反应......就像这样
bot1.calculationStream.subscribe(botController.botActivityAction)
bot 将依次发出 2 个不同的事件(calculationStarted 和 calculationEnded,其中包含实际结果)
当机器人发出开始计算的事件时(如果市场事件对机器人感兴趣,因此并非所有机器人都会发出启动事件,就会发生这种情况)botController 应执行以下操作,从第一个机器人启动事件开始计算时间,并且等待所有发出类似事件的机器人,如果注册的机器人提前完成,比较立即开始......
对不起,如果这个问题太抽象了,但我真的不知道如何使用 RxJava 实现 botControllers 行为......任何努力都值得赞赏......有这么多 rx 转换,我真的不知道我可以在那里使用什么。
更新
假设我们的控制器订阅了 N 个机器人事件,每个机器人可以发出 2 个事件(STARTED、COMPLETED)...
现在,当控制器收到第一个 STARTED 事件时,它开始倒计时 T,而 T 时间未到期,它将接受来自机器人的新事件,当 T 到期或所有机器人返回 COMPLETED 事件时,它会进行一些计算并返回单个结果。 ..
我不明白的部分:据我所知,rx 是孤立地处理每个事件,因此可以避免典型的并发问题,现在我有几个相互关联的事件,我不知道如何使用rx...我只是需要一些指导。
【问题讨论】:
-
您的问题是什么?我认为你想知道如何构建一个“机器人控制器”来订阅 N 个 observables,然后在 T 时间后获取所有可用的结果,对它们做一些事情,然后传递?跨度>
-
几乎是的,当第一个“botStartedCalculation”发出 botController 注册该机器人并知道该机器人将返回“botResult”(或者如果经过 T 时间并且该机器人没有任何东西到达时被忽略),我的问题/问题是我真的不明白如何使用 Rx 转换来实现这种行为,我需要类似伪代码之类的东西,如果这可以通过 Rx 给我一个线索......我将更新问题以更清楚地解释问题...
-
我什至试图找人帮忙,但没有人回应:(
标签: java-8 reactive-programming rx-java