模拟与Sinatra的慢速连接

时间:2013-10-22 23:28:21

标签: ruby sinatra

我是前端开发人员,当我编写代码时,我将Sinatra用作静态文件服务器后端:

require 'sinatra'

configure do
  set :public_folder, File.dirname(__FILE__)
end

get '/' do
  send_file File.join(settings.public_folder, 'index.html')
end

get '/:name' do
  file = File.join(settings.public_folder, params[:name])
  if File.exist?(file)
    send_file file
  else
    halt 404
  end
end

我对此很满意,但这次我被赋予了创建JS介绍的任务,该介绍仅在页面加载时执行一些复杂的行为。

我无法测试这种JS行为,因为在我的开发沙箱中,Sinatra会立即提供文件。

如何让Sinatra以给定的最大速率缓慢提供文件,例如: G。 10 Kbps?另类方法建议也值得赞赏。

1 个答案:

答案 0 :(得分:3)

如果您将文件拆分成块并逐渐展示它们,这可能是一个例子:

require 'sinatra'
require "sinatra/streaming"

def file_chunks
  [].tap do |chunks|
    File.open("index.html", "rb") do |io|
      while not io.eof?
        chunks << io.read(10)
      end
    end
  end
end

get '/send_file_slowly' do
  stream do |out|
    file_chunks.each do |chunk|
      out.print chunk
      out.flush
      sleep 0.2
    end
  end
end