class ActionController::Live::SSE
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
Примечание: в настоящее время SSE не поддерживаются IE. Однако они поддерживаются Chrome, Firefox, Opera и Safari.
Константы
- PERMITTED_OPTIONS
Открытые методы класса
# File actionpack/lib/action_controller/metal/live.rb, line 156
def initialize(stream, options = {})
@stream = stream
@options = options
end Открытые методы экземпляра
# File actionpack/lib/action_controller/metal/live.rb, line 161 def close @stream.close end
# File actionpack/lib/action_controller/metal/live.rb, line 165
def write(object, options = {})
case object
when String
perform_write(object, options)
else
perform_write(ActiveSupport::JSON.encode(object), options)
end
end
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.