基于事件主体中的唯一ID拆分node.js事件流

时间:2015-06-25 19:20:28

标签: rxjs

我有一个基于node.js的定位服务,当用户移动时会产生事件,我想使用RxJS来处理这些事件,并寻找任意复杂的模式,例如用户进入某个区域并访问其中的2个兴趣点1小时。

首先,我需要根据唯一的用户ID(来自事件正文)拆分事件流,但我找不到任何可以执行此操作的RxJS函数。

filter()将要求事先知道所有uuids,这是不可取的。 groupBy()看起来需要在返回分组的observable之前处理整个序列,这是不可能的。

我在想,也许我需要构建一个自定义observable来维护uuids到observable的映射,并根据需要实例化新的observable。然后,这些可观察者中的每一个将需要经历相同的处理以搜索模式匹配,并且当用户的移动与模式匹配时最终触发一些动作。这里面临的一个明显挑战是,当用户进入系统并移动时,我会生成一个动态增长的可观察地图。

有什么想法可以用RxJS实现这样的事情吗?

1 个答案:

答案 0 :(得分:0)

我认为你误解了groupBy()的工作原理。每次生成新密钥时,它都会生成一个新的Observable,如果该密钥已经存在,则只会将其推送到现有的Observable

所以对于你的问题,它看起来应该是这样的:

var source = getLocationEvents();
var disposable = new Rx.CompositeDisposable();

disposable.add(
 source.groupBy(function(x) { return x.userid; })
       .map(function(x) { 
         return x.map(function(ev) { /*Process the the event*/ }); 
       })
       .subscribe(function(group) { 
         disposable.add(group.subscribe(/*Do something with the event*/));
       });