5

我正在尝试使用 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

我认为我的请求在收到事件之前就结束了,这意味着它永远不会在取消订阅块中结束。这是正确的方法吗,如果是,我错过了什么?

4

1 回答 1

1

SOLN 1:您可以使用 rest_client gem 在模型的 after_save 回调中向控制器发送请求。

SOLN 2:为什么不在控制器中调用模型方法来创建数据库记录,然后根据是否创建记录来处理进一步的操作

于 2015-04-15T14:13:19.243 回答