Spec-Zone.ru › Ruby on Rails 8.1

class ActionController::Live::SSE

Родительский класс:
Object

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

Открытые методы класса

new (stream, options = {}) Показать исходный код
# File actionpack/lib/action_controller/metal/live.rb, line 156
def initialize(stream, options = {})
  @stream = stream
  @options = options
end

Открытые методы экземпляра

close () Показать исходный код
# File actionpack/lib/action_controller/metal/live.rb, line 161
def close
  @stream.close
end
write (object, options = {}) Показать исходный код
# 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API