我想写一些类似于HTTP Web代理的东西。我目前正在探索将Ruby与Sinatra一起使用。
我担心的一个主要问题是我向另一台服务器发出的HTTP请求可能需要一段时间才能回来。如何确保我可以在此期间继续提供其他请求?
我创建了一个非常人为的例子来模拟这种阻塞。
hello.rb的:
require 'rubygems'
require 'sinatra'
set :server, 'thin'
get '/fast' do
'Fast Hello World!'
end
get '/slow' do
sleep 10
'Slow Hello World!'
end
config.ru:
require './hello'
run Sinatra::Application
让我感到非常困惑的是这个。如果我在本地用“ruby hello.rb”运行它,访问/ slow将不会干扰访问/快速。但是,如果我部署到Heroku,那么突然,对/ fast的请求将等待请求/缓慢完成。我曾经想过本地和Heroku,这个应用程序运行在单线程Thin。我无法理解为什么我会有不同的行为。
我对这一切都很陌生。为什么我会遇到这种不一致的行为?什么是完成我想要做的好方法?
谢谢!
答案 0 :(得分:1)
因为命令“ruby hello.rb”会在您运行请求后关闭瘦服务器,但是heroku会使您的ruby线程在Web服务器上保持活动状态,因此您可以尝试使用HTTP请求更多时间。 / p>
你可以使用这个thin start
(确保你当前的目录有config.ru),如果你已经安装了瘦服务器,你会看到结果是heroku。