mirror of https://github.com/lukechilds/node.git
Ryan
16 years ago
2 changed files with 95 additions and 0 deletions
@ -0,0 +1,95 @@ |
|||||
|
DIR = File.dirname(__FILE__) |
||||
|
|
||||
|
def fib(n) |
||||
|
return 1 if n <= 1 |
||||
|
fib(n-1) + fib(n-2) |
||||
|
end |
||||
|
|
||||
|
def wait(seconds) |
||||
|
n = (seconds / 0.01).to_i |
||||
|
n.times do |
||||
|
sleep(0.01) |
||||
|
#File.read(DIR + '/yahoo.html') |
||||
|
end |
||||
|
end |
||||
|
|
||||
|
class SimpleApp |
||||
|
@@responses = {} |
||||
|
|
||||
|
def initialize |
||||
|
@count = 0 |
||||
|
end |
||||
|
|
||||
|
def deferred?(env) |
||||
|
false |
||||
|
end |
||||
|
|
||||
|
def call(env) |
||||
|
path = env['PATH_INFO'] || env['REQUEST_URI'] |
||||
|
commands = path.split('/') |
||||
|
|
||||
|
@count += 1 |
||||
|
if commands.include?('periodical_activity') and @count % 10 != 1 |
||||
|
return [200, {'Content-Type'=>'text/plain'}, "quick response!\r\n"] |
||||
|
end |
||||
|
|
||||
|
if commands.include?('fibonacci') |
||||
|
n = commands.last.to_i |
||||
|
raise "fibonacci called with n <= 0" if n <= 0 |
||||
|
body = (1..n).to_a.map { |i| fib(i).to_s }.join(' ') |
||||
|
status = 200 |
||||
|
|
||||
|
elsif commands.include?('wait') |
||||
|
n = commands.last.to_f |
||||
|
raise "wait called with n <= 0" if n <= 0 |
||||
|
wait(n) |
||||
|
body = "waited about #{n} seconds" |
||||
|
status = 200 |
||||
|
|
||||
|
elsif commands.include?('bytes') |
||||
|
n = commands.last.to_i |
||||
|
raise "bytes called with n <= 0" if n <= 0 |
||||
|
body = @@responses[n] || "C"*n |
||||
|
status = 200 |
||||
|
|
||||
|
elsif commands.include?('fixed') |
||||
|
n = 20 * 1024; |
||||
|
body = @@responses[n] || "C"*n |
||||
|
status = 200 |
||||
|
|
||||
|
elsif commands.include?('test_post_length') |
||||
|
input_body = "" |
||||
|
while chunk = env['rack.input'].read(512) |
||||
|
input_body << chunk |
||||
|
end |
||||
|
if env['CONTENT_LENGTH'].to_i == input_body.length |
||||
|
body = "Content-Length matches input length" |
||||
|
status = 200 |
||||
|
else |
||||
|
body = "Content-Length doesn't matches input length! |
||||
|
content_length = #{env['CONTENT_LENGTH'].to_i} |
||||
|
input_body.length = #{input_body.length}" |
||||
|
status = 500 |
||||
|
end |
||||
|
else |
||||
|
status = 404 |
||||
|
body = "Undefined url" |
||||
|
end |
||||
|
|
||||
|
body += "\r\n" |
||||
|
headers = {'Content-Type' => 'text/plain', 'Content-Length' => body.length.to_s } |
||||
|
[status, headers, [body]] |
||||
|
end |
||||
|
end |
||||
|
|
||||
|
|
||||
|
if $0 == __FILE__ |
||||
|
#require DIR + '/../lib/ebb' |
||||
|
require 'rubygems' |
||||
|
require 'rack' |
||||
|
require 'thin' |
||||
|
require 'ebb' |
||||
|
# Rack::Handler::Mongrel.run(SimpleApp.new, :Port => 8000) |
||||
|
Thin::Server.start("0.0.0.0", 8000, SimpleApp.new) |
||||
|
# Ebb::start_server(SimpleApp.new, :port => 8000) |
||||
|
end |
Loading…
Reference in new issue