Action Controller Live
服务器发送事件
此类提供将 SSE
(服务器发送事件)写入 IO
流的功能。此类使用流进行初始化,可用于写入 JSON 字符串或可转换为 JSON 的对象。
写入对象将将其转换为标准的 SSE
格式,并使用您配置的任何选项。您可以选择设置以下选项
:event
-
如果指定,则将使用此名称在浏览器上调度事件。
:retry
-
尝试发送事件时使用的毫秒级重新连接时间。
:id
-
如果在将
SSE
发送到浏览器时连接断开,则服务器将收到一个Last-Event-ID
标头,其值等于id
。
在 SSE
对象的构造函数中设置选项后,所有将来通过流发送的 SSE 都将使用这些选项,除非被覆盖。
示例用法
class MyController < ActionController::Base
include ActionController::Live
def index
response.headers['Content-Type'] = 'text/event-stream'
sse = SSE.new(response.stream, retry: 300, event: "event-name")
sse.write({ name: 'John'})
sse.write({ name: 'John'}, id: 10)
sse.write({ name: 'John'}, id: 10, event: "other-event")
sse.write({ name: 'John'}, id: 10, event: "other-event", retry: 500)
ensure
sse.close
end
end
注意:IE 当前不支持 SSE。但是,Chrome、Firefox、Opera 和 Safari 支持 SSE。
方法
常量
PERMITTED_OPTIONS | = | %w( retry event id ) |
类公共方法
new(stream, options = {}) 链接
来源:显示 | 在 GitHub 上
# File actionpack/lib/action_controller/metal/live.rb, line 115 def initialize(stream, options = {}) @stream = stream @options = options end
实例公共方法
close() 链接
来源:显示 | 在 GitHub 上
# File actionpack/lib/action_controller/metal/live.rb, line 120 def close @stream.close end
write(object, options = {}) 链接
来源:显示 | 在 GitHub 上
# File actionpack/lib/action_controller/metal/live.rb, line 124 def write(object, options = {}) case object when String perform_write(object, options) else perform_write(ActiveSupport::JSON.encode(object), options) end end