Javascript Rails ActionController::Live-一次发送所有内容,而不是异步发送
我对railsJavascript Rails ActionController::Live-一次发送所有内容,而不是异步发送,javascript,ruby-on-rails,ffmpeg,server-sent-events,actioncontroller,Javascript,Ruby On Rails,Ffmpeg,Server Sent Events,Actioncontroller,我对railsActionController::Live有问题 最后,我想向用户展示FFMPEG的进展,但现在我想让这个最小的示例运行: Rails媒体控制器.rb: class MediaController < ApplicationController include ActionController::Live def stream puts "stream function loaded" response.headers['Content-Ty
ActionController::Live有问题
最后,我想向用户展示FFMPEG的进展,但现在我想让这个最小的示例运行:
Rails媒体控制器.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
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错误。一旦我导航到该站点,MediaController的“流”操作就会被成功调用。我可以通过查看服务器控制台来验证这一点。它给我以下输出。在每条响应线之后,都会有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]
但问题是,它在5秒后同时从服务器发送所有这10条消息!然而,预期的行为是,它应该每0.5秒向我发送一条消息强>
那么我做错了什么?错误在哪里
我可以通过使用不同的Web服务器来解决这个问题。之前我使用了thin
,我发现:
您不能将AC::Live
与Thin
可以在此处找到解释:
Thin不适用于流媒体和ActionController::Live
使用Thin的唯一方法是使用异步API:
. Thin正是为这种材料而建造的,并使其具有可伸缩性
或者更简单,请使用以下命令:
因此,切换到另一台服务器解决了问题:
gem 'puma'
从
rails s Puma
我可以通过使用不同的Web服务器来解决这个问题。之前我使用了thin
,我发现:
您不能将AC::Live
与Thin
可以在此处找到解释:
Thin不适用于流媒体和ActionController::Live
使用Thin的唯一方法是使用异步API:
. Thin正是为这种材料而建造的,并使其具有可伸缩性
或者更简单,请使用以下命令:
因此,切换到另一台服务器解决了问题:
gem 'puma'
从
rails s Puma