나는 HTTP 웹 프록시와 비슷한 것을 쓰고 싶다. 나는 이것을 위해 Sinatra와 함께 Ruby를 사용하여 현재 탐색 중이다.Sinatra를 사용하여 웹 프록시 구축, I/O 차단 처리? (+ 이상한 Heroku 요청 동시성 문제)
내 주요 관심사 중 하나는 내가 다른 서버에 보내는 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 액세스는/fast 액세스를 방해하지 않습니다. 그러나, 내가 Heroku에 배포하면 갑자기/fast 요청은 요청이 완료 될 때까지 기다릴 것입니다. 로컬 및 Heroku에서이 앱이 단일 스레드 Thin에서 실행되고 있다고 생각했습니다. 나는 왜 내가 다른 행동을하는지 이해할 수 없다.
나는이 모든 것에 매우 익숙하다. 왜 내가이 일관성없는 행동을 경험하고 있습니까? 내가하려는 일을 성취하는 좋은 방법은 무엇일까요?
감사합니다.
로컬로 단일 프로세스를 실행하고 있습니까? heroku에서 설명하는 동작은 내가 기대하는 것입니다. 즉, heroku 앱에 하나의 dyno 만 있으면됩니다. 어쨌든 비 차단 요청의 경우 http://rubyeventmachine.com/을 살펴 보거나 루비를 신경 쓰지 않는 것이 좋습니다. http://nodejs.org/ – leonardoborges