update
コントローラーのアクションが呼び出されるたびに (またはモデルが更新されるたびに)、サーバー送信イベントを発行したいと考えています。私は現在watch
、ダミーエミッターを使用して同じコントローラーで動作するアクションを持っています:
def watch
self.response.headers["Content-Type"] = "text/event-stream"
self.response.headers["Last-Modified"] = Time.now.ctime.to_json
self.response_body = Enumerator.new do |y|
100.times do |i|
sleep 5
y << ["event: message", "data: #{i}\n\n"].join("\n")
end
end
# TODO catch IO error when client disconnects
end
update
が呼び出されたときに値を生成/返す列挙可能なオブジェクトを取得するにはどうすればよいですか? (注: 本当に Enumerable である必要はありませんが#each
、このストリーミング手法が機能するには応答する必要があります。) ある意味では、Rails でイベント駆動型アーキテクチャを実装しようとしていると思います。
Observableは知っていますが、必要に応じてオブザーバーを列挙可能にする方法、またはループとスリープ タイマーを使用せずに (上記のように) オブザーバーを Enumerator に配置する方法がわかりません。
これの目的は、データベースに加えられた変更を、現在ログインしている他のすべてのユーザーに送信して、各ユーザーが常にデータベースの現在の反映を持つようにすることです。
ありがとう-