带事件循环或线程池的FRP示例

时间:2016-04-06 13:28:20

标签: system.reactive reactive-programming nonblocking frp event-loop

我的问题最终是针对ruby rx库,尽管任何语言的任何示例都会很高兴。 基本上我想要的是将每个操作安排到现有的事件循环(或线程池,就此而言)。我想这必须由调度程序完成。我还没有找到调度程序将递归操作发送到事件循环的任何示例,这就是我要问的原因。这是ruby rx的列表:

https://github.com/ReactiveX/RxRuby/tree/master/lib/rx/concurrency

为什么事件循环?因为我想添加在事件循环中工作的IO操作并利用并发性。像这样:

Rx::Observable.from_enumerable(hosts).
  map { |h| HTTP.connect(h) }.
  map{|host| host.get("http://myservice/somelist.txt") }.
  on_next { |html| parse(html).each_line.....} # you get the idea

1 个答案:

答案 0 :(得分:1)

通常使用Scheduler完成,我希望RubyRx端口包含EventloopScheduler

您可以使用ObserveOn运算符

将它们排队/调度到它上面
Rx::Observable.from_enumerable(hosts).
  observeOn(els). # you have declared els somewhere else as an EventLoopScheduler instance
  map { |h| HTTP.connect(h) }.
  map{|host| host.get("http://myservice/somelist.txt") }.
  on_next { |html| parse(html).each_line.....} # you get the idea

或者你可以在地图中添加并发性

Rx::Observable.from_enumerable(hosts).
  observeOn(els). # you have declared els somewhere else as an EventLoopScheduler instance
  map { |h| HTTP.connect(h) }.
  flatmap{|host| Rx::Observable.start(host.get("http://myservice/somelist.txt"), els) }.
  on_next { |html| parse(html).each_line.....} # you get the idea

我希望代码可以工作(我是C#/ JS)