信号让连接打开

时间:2016-01-14 08:58:57

标签: ruby-on-rails request streaming

我目前想知道如何告诉我的Rails应用根据某些数据不关闭连接。

让我想象一下,我会播放一段50分钟的音乐。当我开始播放这首音乐时,我也开始流式传输(预加载)第二个音乐(不播放它)。 当我的第一首音乐结束时,第二首音乐会在预先下载的内容结束时失败,因为没有下载任何新字节,服务器会将此请求视为失败(超时)。

我当然不想增加超时时间。每个人都知道,增加超时可能会带来更多不好的事情。

我想知道如何发送类似ping之类的东西,不要将此流请求视为失败。

这是我的代码Rails代码:

send_data file.read,
          :status => status_code,
          :stream => 'true',
          :disposition =>  'inline'

1 个答案:

答案 0 :(得分:0)

你重新发明轮子。您需要include ActionController::Live才能在rails中启用流式传输。这将解决您的超时问题,但您必须手动关闭所有流,请记住。

以下是如何使用该模块的示例:

class StreamingController < ApplicationController
  include ActionController::Live

  def send_something
    response.headers['Content-Type'] = 'text/event-stream'
    10.times {
      response.stream.write "This message will be repeated 10 times with delay in 1 second.\n"
      sleep 1
    }
    response.stream.close
  end
end

ActionController::Live documentation page

同样SSE可能对您有用。看看吧。