Новое в 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.
Одно из основных улучшений, добавленное в Rails 4, является возможность передать данные клиенту потоком. В то время как потоковая передача шаблонов в настоящее время доступна в Rails 3, благодаря усилиям Аарона Паттерсона, мы можем теперь передать потоком и другие типы данных, такие как JSON.
Чтобы включить потоковую передачу в контроллере, Вы должны подключить (mixin) модуль
ActionController::Live
. Это обеспечивает интерфейс ввода-вывода к ответу (response
), позволяя Вам постоянно отдавать данные клиенту, пока поток не будет закрыт.Пример контроллера, использующего потоковую передачу данных:
Требования
actions
в контроллере с подключеннымActionController::Live
выполняются в отдельных потоках, таким образом код контроллера должен быть ориентирован на многопотоковое исполнениеПочему это так важно?
Одна только эта функция позволяет в Rails делать больше, чем просто выдача веб-страницы HTTP или JSON. Теперь возможно придумать множество других вариантов использования, которые не были возможны в прошлом. Например, использование Server-sent событий, возможность создать чат, посылать уведомления, и каналы в реальном времени доступны теперь в Raisl 4.