Rakefile in falcon-0.1.3 vs Rakefile in falcon-0.2.0

- old
+ new

@@ -1,43 +1,71 @@ -# encoding: utf-8 -require 'rake' -require 'rake/testtask' -require 'rake/rdoctask' -require File.join(File.dirname(__FILE__), 'lib', 'falcon', 'version') +require "bundler/gem_tasks" +require "rspec/core/rake_task" -desc 'Default: run unit tests.' +RSpec::Core::RakeTask.new(:test) + task :default => :test -desc 'Test the falcon plugin.' -Rake::TestTask.new(:test) do |t| - t.libs << 'lib' - t.libs << 'test' - t.pattern = 'test/**/*_test.rb' - t.verbose = true -end +task :server do + require 'async/reactor' + require 'async/http/server' + + app = lambda do |env| + [200, {}, ["Hello World"]] + end -desc 'Generate documentation for the falcon plugin.' -Rake::RDocTask.new(:rdoc) do |rdoc| - rdoc.rdoc_dir = 'rdoc' - rdoc.title = 'Falcon' - rdoc.options << '--line-numbers' << '--inline-source' - rdoc.rdoc_files.include('README.rdoc') - rdoc.rdoc_files.include('lib/**/*.rb') + server = Async::HTTP::Server.new([ + Async::IO::Address.tcp('127.0.0.1', 9294, reuse_port: true) + ], app) + + Async::Reactor.run do + server.run + end end -begin - require 'jeweler' - Jeweler::Tasks.new do |s| - s.name = "falcon" - s.version = Falcon::VERSION.dup - s.summary = "Background video encoding" - s.description = "Background video encoding via resque" - s.email = "galeta.igor@gmail.com" - s.homepage = "https://github.com/galetahub/falcon" - s.authors = ["Igor Galeta", "Pavlo Galeta"] - s.files = FileList["[A-Z]*", "{app,config,lib}/**/*"] - %w(Gemfile Gemfile.lock) - end - - Jeweler::GemcutterTasks.new -rescue LoadError - puts "Jeweler not available. Install it with: gem install jeweler" +task :client do + require 'async/reactor' + require 'async/http/client' + + client = Async::HTTP::Client.new([ + Async::IO::Address.tcp('127.0.0.1', 9294, reuse_port: true) + ]) + + Async::Reactor.run do + response = client.get("/") + + puts response.inspect + end end + +task :wrk do + require 'async/reactor' + require 'async/http/server' + + app = lambda do |env| + [200, {}, ["Hello World"]] + end + + server = Async::HTTP::Server.new([ + Async::IO::Address.tcp('127.0.0.1', 9294, reuse_port: true) + ], app) + + process_count = Etc.nprocessors + + pids = process_count.times.collect do + fork do + Async::Reactor.run do + server.run + end + end + end + + url = "http://127.0.0.1:9294/" + + connections = process_count + system("wrk", "-c", connections.to_s, "-d", "2", "-t", connections.to_s, url) + + pids.each do |pid| + Process.kill(:KILL, pid) + Process.wait pid + end +end \ No newline at end of file