我正在尝试使用 Rails 中的服务器发送事件来进行实时流媒体处理。我有一个 Rake 任务侦听将记录添加到数据库的文件更改。添加后,我想将 SSE 发送到前端。
但是,模型不能将事件发送到前端,由控制器负责。如何告诉我的控制器一条新记录已添加到数据库中?
到目前为止我的(损坏的)解决方案:在模型中使用带有回调的EventBusafter_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
我认为我的请求在收到事件之前就结束了,这意味着它永远不会在取消订阅块中结束。这是正确的方法吗,如果是,我错过了什么?