0
我想通知用戶瀏覽器的模型狀態更改。我正在嘗試使用Rails的實時模塊。以下是我迄今爲止得到:Rails Live:動態發送從方法到瀏覽器的結果
require 'json'
class Admin::NotificationsController < ActionController::Base
include ActionController::Live
def index
puts "sending message"
videos = Video.all
response.headers['Content-Type'] = 'text/event-stream'
begin
if(params[:id].present?)
response.stream.write(sse({id: params[:id]},{event: "video_encoded"}))
end
rescue IOError
ensure
response.stream.close
end
end
private
def sse(object, options = {})
(options.map{|k,v| "#{k}: #{v}" } << "data: #{JSON.dump object}").join("\n") + "\n\n"
end
end
上述控制器背後的想法是,當它的URL獲取一個參數調用,它會發送此參數(在這種情況下,ID)給用戶。這裏是我在嘗試調用控制器:
notifications_path(id: video.id)
但不幸的是,以下的事件監聽器在瀏覽器不火,就算我用捲曲挑起的事件:
var source = new EventSource('/notifications');
source.addEventListener("video_encoded", function(event) {
console.log("message")
console.log(event)
});
這樣做的目標是,如果有變化,我想添加一個DOM元素到某個頁面(稍後)。可能有更好的方法,但Ruby Live似乎是一個合適的解決方案。任何提示或建議不同的方法,都表示讚賞。
您的用例看起來不像'ActionController :: Live'的有效用例。您沒有向瀏覽器發送流式輸出。您一次檢查ID併發送JSON輸出。 – emaillenin
那麼什麼是更好的方法來處理它呢? –
使用常規控制器 – emaillenin