У меня есть проблема с рельсами ActionController::Live
Rails ActionController :: Live - Посылает все сразу, а не асинхронные
В конце концов, я хочу показать прогресс FFMPEG пользователя, но сейчас я хочу, чтобы это минимальный пример работы:
Rails media_controller.rb:
class MediaController < ApplicationController
include ActionController::Live
def stream
puts "stream function loaded"
response.headers['Content-Type'] = 'text/event-stream'
i = 0
begin
response.stream.write "data: 1\n\n"
sleep 0.5
i += 1
puts "response... data: " + i.to_s
end while i < 10
response.stream.close
end
end
Javascript:
source = new EventSource("/test/0");
source.addEventListener("message", function(response) {
// Do something with response.data
console.log('I have received a response from the server: ' + response);
}, false);
Когда я перехожу на сайт, нет ошибок JavaScript. Как только я перейду на сайт, «поток» -Action of MediaController успешно вызван. Я могу проверить это, посмотрев на Server-Console. Это дает мне следующий результат. После каждой строки ответа, есть 500мс задержка, как ожидалось:
stream function loaded
response... data: 1
response... data: 2
response... data: 3
response... data: 4
response... data: 5
response... data: 6
response... data: 7
response... data: 8
response... data: 9
response... data: 10
Completed 200 OK in 5005ms (ActiveRecord: 0.8ms)
На JavaScript стороне, он дает мне следующий результат:
(10x) I have received a response from the server: [object MessageEvent]
Но проблема здесь, что он посылает все эти 10 сообщений с сервера через 5 секунд в то же время! Ожидаемое поведение, однако, то, что должно отправить мне 1 сообщение каждые 0,5 секунды!
Так что я делаю неправильно здесь? Где ошибка?