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但我不知道如何让我的观察者可以根据需要进行枚举......或者如何在没有循环和睡眠计时器的情况下将观察者放入枚举器(如上)。
这样做的目的是将对数据库所做的更改发送给当前登录的所有其他用户,以便每个用户始终拥有数据库的当前反映。
谢谢-