Новое в 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.