Cайт веб-разработчика, программиста Ruby on Rails ESV Corp. Екатеринбург, Москва, Санкт-Петербург, Первоуральск

Админка на Ruby on Rails

Новое в Rails 4: потоковая передача данных (Live Streaming)

Одно из основных улучшений, добавленное в Rails 4, является возможность передать данные клиенту потоком. В то время как потоковая передача шаблонов в настоящее время доступна в Rails 3, благодаря усилиям Аарона Паттерсона, мы можем теперь передать потоком и другие типы данных, такие как JSON.

Чтобы включить потоковую передачу в контроллере, Вы должны подключить (mixin) модуль ActionController::Live. Это обеспечивает интерфейс ввода-вывода к ответу (response), позволяя Вам постоянно отдавать данные клиенту, пока поток не будет закрыт.

Пример контроллера, использующего потоковую передачу данных:

class MyController < ActionController::Base
  include ActionController::Live

  def stream
    response.headers['Content-Type'] = 'text/event-stream'
    100.times {
      response.stream.write "hello world\n"
      sleep 1
    }
    response.stream.close
  end
end

 

Требования

  • все actions в контроллере с подключенным ActionController::Live выполняются в отдельных потоках, таким образом код контроллера должен быть ориентирован на многопотоковое исполнение
  • требуется веб-сервер, который поддерживает многопотоковое исполнение кода
  • прежде всего клиенту должен быть отдан заголовок, прежде чем начать передавать в поток данные
  • потоки обязательно должны быть закрыты

Почему это так важно?

Одна только эта функция позволяет в Rails делать больше, чем просто выдача веб-страницы HTTP или JSON. Теперь возможно придумать множество других вариантов использования, которые не были возможны в прошлом. Например, использование Server-sent событий, возможность создать чат, посылать уведомления, и каналы в реальном времени доступны теперь в Raisl 4.