Class: Wsv::Server
- Inherits:
-
Object
- Object
- Wsv::Server
- Defined in:
- lib/wsv/server.rb
Defined Under Namespace
Classes: DeadlineReader
Constant Summary collapse
- DEFAULT_READ_TIMEOUT =
10- DEFAULT_MAX_CONNECTIONS =
8- DRAIN_TIMEOUT =
5
Instance Attribute Summary collapse
-
#host ⇒ Object
readonly
Returns the value of attribute host.
-
#port ⇒ Object
readonly
Returns the value of attribute port.
-
#root ⇒ Object
readonly
Returns the value of attribute root.
Instance Method Summary collapse
- #handle(client) ⇒ Object
-
#initialize(host:, port:, root:, out: $stdout, err: $stderr, read_timeout: DEFAULT_READ_TIMEOUT, max_connections: DEFAULT_MAX_CONNECTIONS) ⇒ Server
constructor
A new instance of Server.
- #start ⇒ Object
- #stop ⇒ Object
Constructor Details
#initialize(host:, port:, root:, out: $stdout, err: $stderr, read_timeout: DEFAULT_READ_TIMEOUT, max_connections: DEFAULT_MAX_CONNECTIONS) ⇒ Server
Returns a new instance of Server.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/wsv/server.rb', line 16 def initialize( host:, port:, root:, out: $stdout, err: $stderr, read_timeout: DEFAULT_READ_TIMEOUT, max_connections: DEFAULT_MAX_CONNECTIONS ) @host = host @port = port @root = File.realpath(root) @out = out @err = err @read_timeout = read_timeout @max_connections = max_connections @app = App.new(@root) @running = false @mutex = Mutex.new @active = 0 end |
Instance Attribute Details
#host ⇒ Object (readonly)
Returns the value of attribute host.
14 15 16 |
# File 'lib/wsv/server.rb', line 14 def host @host end |
#port ⇒ Object (readonly)
Returns the value of attribute port.
14 15 16 |
# File 'lib/wsv/server.rb', line 14 def port @port end |
#root ⇒ Object (readonly)
Returns the value of attribute root.
14 15 16 |
# File 'lib/wsv/server.rb', line 14 def root @root end |
Instance Method Details
#handle(client) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/wsv/server.rb', line 53 def handle(client) reader = DeadlineReader.new(client, Time.now + @read_timeout) request = Request.parse(reader) case request when :empty nil when :malformed write_response(client, Response.text(400)) else write_response(client, @app.call(request)) end rescue Request::TooLarge => e write_response(client, Response.text(e.status_code)) rescue IO::TimeoutError write_response(client, Response.text(408)) rescue StandardError => e @err.puts "wsv: #{e.class}: #{e.}" write_response(client, Response.text(400)) ensure graceful_close(client) end |
#start ⇒ Object
38 39 40 41 42 43 44 45 46 |
# File 'lib/wsv/server.rb', line 38 def start @server = TCPServer.new(host, port) @running = true log_startup trap_signals accept_loop ensure close end |
#stop ⇒ Object
48 49 50 51 |
# File 'lib/wsv/server.rb', line 48 def stop @running = false close end |