我正试图在Live Streaming中围绕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
我认为我的请求在收到事件之前结束,这意味着它永远不会在de subscribe块中结束。这是正确的方法,如果是的话,我错过了什么?
答案 0 :(得分:1)
SOLN 1:您可以使用rest_client gem在模型的after_save回调中向您的控制器发送请求。
SOLN 2:为什么不在控制器中调用模型方法创建数据库记录,然后根据是否创建记录来处理进一步的操作