アプリケーションは n 秒ごとに、トレーディング システム内の証券のライブ価格を提供するリモート JSON ファイルを要求しています。JSON には、必要なデータを含むmarketdata
ブロック ( ) と、現在のデータを含むブロックdataversion
(version
およびseqnum
) があります。
現在、 ActionController::Live
(EventSource
クライアント側で) を使用して、更新されたデータをブラウザーにプッシュしています。すべてのアクションは 1 つのメソッド内で実行されます。
- SSE接続を開く;
- 動的 URL の形成;
- リモート サーバーから新しいデータを取得する。
- 値の比較/再割り当て
seqnum
; - 必要に応じてデータベースを更新します。
したがって、私の目標は、データベースのプルと更新 ( ActiveJob
) と、更新された値のブラウザーへのプッシュ( ) を分離することActionController::Live
です。これを達成するには、次のものが必要です。
- サーバー側のどこかに保存し、コントローラー
seqnum
とversion
バックグラウンドジョブの間で共有します。 - または、フィールドの最新の変更についてデータベースを監視します
updated_at
。
だから基本的に私は2つの質問があります:
- 上記の 2 つのオプションのうち、どちらがより効率的ですか?他に良い方法はありますか?
- (最初のものに存在する権利がある場合)このアプローチをどのように実装しますか?