跳到内容 跳到搜索

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。

方法
C
N
W

常量

PERMITTED_OPTIONS = %w( retry event id )
 

类公共方法

new(stream, options = {})

# File actionpack/lib/action_controller/metal/live.rb, line 115
def initialize(stream, options = {})
  @stream = stream
  @options = options
end

实例公共方法

close()

# File actionpack/lib/action_controller/metal/live.rb, line 120
def close
  @stream.close
end

write(object, options = {})

# 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