class ActionController::Live::SSE
Action Controller Live Серверные события, отправляемые по потоку
Этот класс предоставляет возможность записи SSE (Server Sent Event) в поток 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 115
def initialize(stream, options = {})
@stream = stream
@options = options
end Публичные методы экземпляра
# File actionpack/lib/action_controller/metal/live.rb, line 120 def close @stream.close end
# 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
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.