Class: Reifier::Server
- Inherits:
-
Object
- Object
- Reifier::Server
- Defined in:
- lib/reifier/server.rb
Instance Method Summary collapse
-
#initialize(app, options = {}) ⇒ Server
constructor
A new instance of Server.
- #start ⇒ Object
Constructor Details
#initialize(app, options = {}) ⇒ Server
Returns a new instance of Server.
3 4 5 6 |
# File 'lib/reifier/server.rb', line 3 def initialize(app, = {}) @app = app = end |
Instance Method Details
#start ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/reifier/server.rb', line 8 def start Thread.abort_on_exception = true Signal.trap 'SIGINT' do puts "\nCleaning up nothing for now..." exit end server = TCPServer.new([:Host], [:Port]) threads = [:Threads] || 5 pool = Concurrent::FixedThreadPool.new([:Threads] || 5) puts "# Environment: #{@options[:environment]}" puts "# Listening on tcp://#{@options[:Host]}:#{@options[:Port]}" puts "# PID: #{Process.pid}" puts "# Number of Threads used: #{threads}" loop do socket = server.accept socket.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1) # Thread.new do pool.post do begin request = Request.new() response = Response.new request.handle(socket) response.protocol = request.protocol response << @app.call(request.rack_env) response.handle(socket) log_request request, response if development? rescue Exception => e log "\nError: #{e.class}\nMessage: #{e.message}\n\nBacktrace:\n\t#{e.backtrace.join("\n\t")}" if development? socket.close end end end end |