4

Web アプリケーションが生成するビジネス イベントのデータベースがあります。
これらのイベント (最大で数百) を受け取る JavaScript アプリケーションを作成したいと考えており、複雑なイベント処理を使用すると、イベント内のいくつかのパターンを見つけることができます。

たとえば、15 分以内にログイン イベントのない login-failure イベントが発生した場合、それについて知りたいと考えています。セッション ID を使用してイベント間を関連付けます。

RxJSが適切なツールであるように思われることから、既存のライブラリを使用することを好みます。
私の質問は、現在のコンピューター時間ではなく、元のイベントのタイムスタンプを使用してイベントのストリームを構築する方法ですか?

RxJS には時間の演算子があることがわかりましたが、現在の時間を使用しているようです。

更新 1良い指示のように見えるHistoricalScheduler
クラスを 見つけましたが、それに関するドキュメントはなく、RxJS に存在するかどうかもわかりません。

4

2 に答える 2

1

おそらく、既存のイベントを発生時のタイムスタンプで並べ替え、それを将来のイベントとマージできるはずです (明らかに既に並べ替えられているため)。その後、同じ方法でイベントを操作できます。

var pastEvents = [
    { userId: 1, time: 100, status: 'failure' },
    { userId: 2, time: 400, status: 'success' },
    { userId: 1, time: 300, status: 'success' },
    { userId: 4, time: 200, status: 'success' },
  ]
  .sort(function (a, b) { return b.time - a.time; });

var futureEvents = getFutureEventObservable();

var events = Rx.Observable.fromArray(pastEvents).merge(futureEvents);

var groups = events.groupBy(function (x) { return x.userId; });

// do "complex event processing" here.

残念ながら、イベントにまだタイムスタンプがない場合、そのデータは失われ、Rx にはそれを再現する特別な方法がありません。

于 2013-11-25T20:24:51.463 に答える
1

rxmarbles のサンプル コードを確認してください。

具体的には、Rx.VirtualTimeScheduler を使用するhttps://github.com/staltz/rxmarbles/blob/master/src/controllers/utils.coffeeです。

私の理解では、ユースケースに合わせてそれを適応させることができるはずです

于 2014-09-25T22:00:17.313 に答える