2016-04-01 4 views
0

私はフェニックスコントローラを使ってREST呼び出しでデータを受信して​​います。したがって、iOSアプリは各ユーザーの「イベント」を送信し、そのイベントに基づいてスコア/ポイントを計算してユーザーに返す必要があります。ユーザーへの計算と返信は、非同期で行うことができます。私はFirebaseを使ってユーザーに連絡しています。"events" elisonirとphoenixとの非同期

計算にはどのようなパターンが良いでしょうか?計算は、そのイベントのスコアを決定するデータベースクエリの束である可能性があります。この計算はどこで行われるべきですか?バックグラウンドワーカーであるGenEventは、ユーザー固有のGenServer内にストリームします(ユーザーごとにGenServerを管理しています)。

+0

私はまだあなたが最終的に達成しようとしていることについて少しは不明です。また、[channels](http://www.phoenixframework.org/docs/channels)を使用していますか? – JustGage

+0

更新された説明を参照してください – ed1t

+0

あなたが実際にREST呼び出しへの応答を介して情報を返送していないことを明確にするには? – JustGage

答えて

1

Phoenix channels,tasksおよびGenServerを見てみましょう。

また、GenServerワーカーのプールを管理して計算を行い、結果を返す場合はConqueuerをチェックしてください。私はこのライブラリを書いており、私の会社の生産システムで使用されています。おそらくErlang/Elixirの中で最も普及しているプール管理ライブラリであるpoolboyを使用しています。

確かに、私はあなたのシステムの要件を完全に理解していませんが、私には見えません。GenEventはあなたの必要条件の場所を持っています。 GenEventは、1つまたは複数のイベントのコンシューマにイベントを配信することについてです。だから、システムの他の部分から放出されたイベントを購読する必要のあるプロセスのグラフがなければ、その役割は分かりません。

+0

私はConqueuerライブラリを使用して終了しました。 – ed1t

+0

作業員のインスタンスを取得することは可能ですか?私は、だから私はFooDatabaseとしてconqueuerで私の労働者を定義し 利用RethinkDB.Connectionに end'を行う として 'defmodule FooDatabase初期化する接続を必要とRethinkDBエリキシルクライアントドライバを使用しています。 – ed1t

+0

Conqueuerは労働者のプールがあるので、労働者へのアクセスを得る方法を公開していません。 'Conqueuer.work(:foo_databases、some_args_here)'のような名前に応じて、プールに作業を渡すだけで、あなたのためにそれを処理します。あなたが従業員のプールから特定の労働者にアクセスしようとしているなら、私はあなたのデザインに疑問を呈します。実際にプールが必要ですか?あなたは実際に直接労働者にアクセスする必要がありますか? –

関連する問題