0

我是一名前端开发人员,当我编写代码时,我使用 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 以给定的最大速率(例如 10 Kbps)缓慢地提供文件?替代方法建议也受到赞赏。

4

1 回答 1

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
于 2013-10-23T10:50:41.990 回答