我目前想知道如何告诉我的Rails应用根据某些数据不关闭连接。
让我想象一下,我会播放一段50分钟的音乐。当我开始播放这首音乐时,我也开始流式传输(预加载)第二个音乐(不播放它)。 当我的第一首音乐结束时,第二首音乐会在预先下载的内容结束时失败,因为没有下载任何新字节,服务器会将此请求视为失败(超时)。
我当然不想增加超时时间。每个人都知道,增加超时可能会带来更多不好的事情。
我想知道如何发送类似ping
之类的东西,不要将此流请求视为失败。
这是我的代码Rails代码:
send_data file.read,
:status => status_code,
:stream => 'true',
:disposition => 'inline'
答案 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可能对您有用。看看吧。