Spec-Zone.ru › Ruby on Rails 8.0

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

Публичные методы класса

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

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

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