среда, 22 апреля 2015 г.

Server Sent Events в Ruby on Rails. Прохождение

В Rails начиная в 4 версии есть поддержка так называемого Live Streaming, позволяющего реализовать Server-Sent Events. По сути своей это костыль, позволяющий держать TCP-соединение открытым не завершая HTTP-транзакцию так что сервер всегда может инициировать отправку данных клиенту по установленному клиентом соединению. Инициируется соединение клиентом как HTTP-запрос, но в ответ сервер отправляет порцию хедеров с Content-Type: text/event-stream и не закрывает соединение. Такой простой механизм лежит в основе Server-Sent Events.
В сети есть несколько тьюториалов по использовании этого в RoR приложении, но они весьма простые и не затрагивают некоторые важные подводные камни, с которыми я столкнулся при написании feature branches build server - приложения подобного continuous integration, но с особенностью не важной для данной записи. О неудобствах, подводных камнях и моём их решении ниже.