Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Rails ActionController::Live-一次发送所有内容,而不是异步发送_Javascript_Ruby On Rails_Ffmpeg_Server Sent Events_Actioncontroller - Fatal编程技术网

Javascript Rails ActionController::Live-一次发送所有内容,而不是异步发送

Javascript 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

我对rails
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