RailsのActionCableを使用してアプリをリアルタイムに実装し、Ember CLIのクライアントサービスとしてコンシューマを実装しましたが、より優れた安価なアプローチを探しています。Rails ActionCableとEmber CLIアプリケーション - リソースのボトルネック
アプリ/モデル/ myobj.rb
has_many :child_objs
def after_commit
ActionCable.server.broadcast("obj_#{self.id}", model: "myobj", id: self.id)
self.child_objs.update_all foo: bar
end
アプリ/モデル/ child_obj.rb
belongs_to :myobj
def change_job
self.job = 'foo'
self.save
ActionCable.server.broadcast("obj_#{self.myobj.id}", model: "child_obj", id: self.id)
end
フロントエンド/アプリ/サービス/ stream.js ここでは、モデルとIDのデータをブロードキャストから取り出し、それを使ってサーバーからリロードします。
import Ember from 'ember';
export default Ember.Service.extend({
store: Ember.inject.service(),
subscribe(visitId) {
let store = this.get("store")
MyActionCable.cable.subscriptions.create(
{channel: "ObjChannel", id: objId}, {
received(data) {
store.findRecord(data.model, data.id, {reload: true});
}
}
);
},
});
このアプローチは、「作品」が、データベースからデータをつかん、再認証要求を必要とする各アップデートのために再び私たちのサーバーを打つ、ナイーブな感じや資源集約的である、オブジェクトを再直列化(その可能性追加のデータベースプルを持つ)、ワイヤを介して送信します。これは、要求の数が多い場合、実際にはプールとスロットルの問題を引き起こします。
モデル、ID、チェンジセット(self.changes
)をRailsブロードキャストに送信し、Emberサイドハンドルで適切なモデルプロパティを設定できると考えています。これは正しいアプローチですか、それとも他に誰かが推薦するものがありますか?