Cim*_*imm 5 event-bus server-sent-events ruby-on-rails-4
我试图围绕Rails中的服务器发送事件进行直播.我有一个Rake任务侦听文件更改,这会将记录添加到数据库中.一旦添加,我想发送一个SSE到前端.
但是,模型不能向前端发送事件,控制器负责.如何告诉我的控制器将新记录添加到数据库中?
到目前为止我的(破碎)解决方案:在模型中使用带有回调的EventBus,after_save它会通知更改并要求控制器监听这些消息:
require 'reloader/sse'
class SseController < ApplicationController
include ActionController::Live
def index
response.headers['Content-Type'] = 'text/event-stream'
sse = Reloader::SSE.new(response.stream)
EventBus.subscribe(:added) do |payload|
sse.write({ /* payload */ })
end
rescue IOError
ensure
sse.close
end
end
Run Code Online (Sandbox Code Playgroud)
我认为我的请求在收到事件之前就结束了,这意味着它永远不会在de subscribe块中结束.这是正确的方法,如果是这样,我错过了什么?
解决方案 1:您可以使用 rest_client gem 在模型的 after_save 回调中向控制器发送请求。
解决方案 2:为什么不在控制器中调用模型方法来创建数据库记录,然后根据是否创建记录来处理进一步的操作
| 归档时间: |
|
| 查看次数: |
684 次 |
| 最近记录: |