falcon 0.17.6 → 0.18.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a9bcaef685cba594d33df1f726e788447663d585c95840f6c45d3aacab44384d
4
- data.tar.gz: ef29a6b370c8ac8266b9f3023ed540b8ee465681450f745ccf62ce55d5d22903
3
+ metadata.gz: 75a05cee4c0a85b523432d1a2f50f094cadb7182a1c3a3dc6f643af3185079e4
4
+ data.tar.gz: e3a023a5752cb1f03e6a9fe9c9578dcedc1f497437e4886e385f10b958d18de9
5
5
  SHA512:
6
- metadata.gz: c3d6dc2b5bc6e1281f7a0214ba87b16146876ab99696b944951614e6b4dc37d492c1ad0c208be1fd94e7453a5691f8a77e6a4c8e63618d9911a3a8fc116fa616
7
- data.tar.gz: 37940a74c4e5c066e78c66c734f518de4fb5534f86593e161d040d4d0127c6b7ed2587d40252c53147dec6b8f45cce6df8530c7fd70f1a910c53f29abad5b69f
6
+ metadata.gz: 7eaeb43379eda8bb633bbb07cf17a686bd05e6e9c0e917211b859f81abdd58e211647a4f7251b7264e67d503062ed58eed486a353d3d0b2aa1973f0098a8cde7
7
+ data.tar.gz: 25a2a02e1c3bcec504148c89e5f850f5977edccb2b87373eb5325dbc6271063507a67323596ad8f637b7b6e35ca18adf94873768b617ac5f31db77be2ced1f02
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
- # Falcon
1
+ # ![Falcon](logo.svg)
2
2
 
3
- A multi-process, multi-fiber Rack HTTP server built on top of [async], [async-io] and [async-http]. Each request is run within a light weight fiber and can block on up-stream requests without stalling the entire server process. Uses a multi-process model for handling blocking requests.
3
+ Falcon is a multi-process, multi-fiber Rack HTTP server built on top of [async], [async-io] and [async-http]. Each request is run within a light weight fiber and can block on up-stream requests without stalling the entire server process. Supports HTTP/1 and HTTP/2 natively.
4
4
 
5
5
  [![Build Status](https://secure.travis-ci.org/socketry/falcon.svg)](http://travis-ci.org/socketry/falcon)
6
6
  [![Code Climate](https://codeclimate.com/github/socketry/falcon.svg)](https://codeclimate.com/github/socketry/falcon)
data/falcon.gemspec CHANGED
@@ -17,12 +17,13 @@ Gem::Specification.new do |spec|
17
17
  spec.require_paths = ["lib"]
18
18
 
19
19
  spec.add_dependency("async-io", "~> 1.9")
20
- spec.add_dependency("async-http", "~> 0.27.0")
20
+ spec.add_dependency("async-http", "~> 0.29.0")
21
21
  spec.add_dependency("async-container", "~> 0.5.0")
22
22
 
23
23
  spec.add_dependency("rack", ">= 1.0")
24
24
 
25
25
  spec.add_dependency('samovar', "~> 1.3")
26
+ spec.add_dependency('localhost', "~> 1.1")
26
27
 
27
28
  spec.add_development_dependency "async-rspec", "~> 1.7"
28
29
  spec.add_development_dependency "async-websocket", "~> 0.6.0"
@@ -19,11 +19,15 @@
19
19
  # THE SOFTWARE.
20
20
 
21
21
  require_relative '../server'
22
+ require_relative '../endpoint'
23
+
24
+ require 'localhost/authority'
22
25
 
23
26
  require 'async/container'
24
27
  require 'async/io/trap'
25
28
  require 'async/io/host_endpoint'
26
29
  require 'async/io/shared_endpoint'
30
+ require 'async/io/ssl_endpoint'
27
31
 
28
32
  require 'samovar'
29
33
 
@@ -36,11 +40,14 @@ module Falcon
36
40
  self.description = "Run an HTTP server."
37
41
 
38
42
  options do
43
+ option '-b/--bind <address>', "Bind to the given hostname/address", default: "https://localhost:9292"
44
+
45
+ option '-p/--port <number>', "Override the specified port", type: Integer
46
+ option '-h/--hostname <hostname>', "Specify the hostname which would be used for certificates, etc."
47
+
39
48
  option '-c/--config <path>', "Rackup configuration file to load", default: 'config.ru'
40
49
  option '-n/--concurrency <count>', "Number of processes to start", default: Async::Container.hardware_concurrency, type: Integer
41
50
 
42
- option '-b/--bind <address>', "Bind to the given hostname/address", default: "tcp://localhost:9292"
43
-
44
51
  option '--forked | --threaded', "Select a specific concurrency model", key: :container, default: :forked
45
52
  end
46
53
 
@@ -64,13 +71,11 @@ module Falcon
64
71
  def run(verbose)
65
72
  app, options = load_app(verbose)
66
73
 
67
- endpoint = nil
74
+ endpoint = Endpoint.parse(@options[:bind], reuse_port: true)
68
75
 
69
- Async::Reactor.run do
70
- endpoint = Async::IO::SharedEndpoint.bound(
71
- Async::IO::Endpoint.parse(@options[:bind], reuse_port: true)
72
- )
73
- end
76
+ bound_endpoint = Async::Reactor.run do
77
+ Async::IO::SharedEndpoint.bound(endpoint)
78
+ end.result
74
79
 
75
80
  Async.logger.info "Falcon taking flight! Binding to #{endpoint} [#{container_class} with concurrency: #{@options[:concurrency]}]"
76
81
 
@@ -86,7 +91,7 @@ module Falcon
86
91
  end
87
92
  end
88
93
 
89
- server = Falcon::Server.new(app, endpoint)
94
+ server = Falcon::Server.new(app, bound_endpoint, endpoint.protocol)
90
95
 
91
96
  server.run
92
97
 
@@ -0,0 +1,55 @@
1
+ # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in
11
+ # all copies or substantial portions of the Software.
12
+ #
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ # THE SOFTWARE.
20
+
21
+ require 'async/http/url_endpoint'
22
+
23
+ module Falcon
24
+ class Endpoint < Async::HTTP::URLEndpoint
25
+ def ssl_context
26
+ @options[:ssl_context] || build_ssl_context
27
+ end
28
+
29
+ def build_endpoint(endpoint = nil)
30
+ super(@options.fetch(:bind, endpoint))
31
+ end
32
+
33
+ def build_ssl_context(hostname = self.hostname)
34
+ authority = Localhost::Authority.fetch(hostname)
35
+
36
+ authority.server_context.tap do |context|
37
+ context.alpn_select_cb = lambda do |protocols|
38
+ if protocols.include? "h2"
39
+ return "h2"
40
+ elsif protocols.include? "http/1.1"
41
+ return "http/1.1"
42
+ elsif protocols.include? "http/1.0"
43
+ return "http/1.0"
44
+ else
45
+ return nil
46
+ end
47
+ end
48
+
49
+ context.session_id_context = "falcon"
50
+ context.set_params
51
+ context.freeze
52
+ end
53
+ end
54
+ end
55
+ end
@@ -19,5 +19,5 @@
19
19
  # THE SOFTWARE.
20
20
 
21
21
  module Falcon
22
- VERSION = "0.17.6"
22
+ VERSION = "0.18.0"
23
23
  end
data/logo.svg ADDED
@@ -0,0 +1,82 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
+ <svg width="100%" height="100%" viewBox="0 0 600 220" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;">
4
+ <g id="Name" transform="matrix(1,0,-0.176327,1,245.058,11.0473)">
5
+ <g transform="matrix(12.4689,0,0,1,2662.53,0)">
6
+ <g opacity="0.5">
7
+ <g id="a2YeZXbxK" transform="matrix(-1.71632,0,0,0.386532,-68.0238,97.1636)">
8
+ <path d="M73.939,38.385L94.531,27.962L73.939,22.859L73.939,38.385Z" style="fill:rgb(86,86,86);fill-rule:nonzero;"/>
9
+ </g>
10
+ <g id="a2YeZXbxK1" serif:id="a2YeZXbxK" transform="matrix(-1.71632,0,0,0.386532,-68.0238,107.164)">
11
+ <path d="M73.939,38.385L94.531,27.962L73.939,22.859L73.939,38.385Z" style="fill:rgb(86,86,86);fill-rule:nonzero;"/>
12
+ </g>
13
+ <g id="a2YeZXbxK2" serif:id="a2YeZXbxK" transform="matrix(-1.71632,0,0,0.386532,-68.0238,117.164)">
14
+ <path d="M73.939,38.385L94.531,27.962L73.939,22.859L73.939,38.385Z" style="fill:rgb(86,86,86);fill-rule:nonzero;"/>
15
+ </g>
16
+ <g id="a2YeZXbxK3" serif:id="a2YeZXbxK" transform="matrix(-1.71632,0,0,0.386532,-68.0238,127.164)">
17
+ <path d="M73.939,38.385L94.531,27.962L73.939,22.859L73.939,38.385Z" style="fill:rgb(86,86,86);fill-rule:nonzero;"/>
18
+ </g>
19
+ <g id="a2YeZXbxK4" serif:id="a2YeZXbxK" transform="matrix(-1.71632,0,0,0.386532,-68.0238,137.164)">
20
+ <path d="M73.939,38.385L94.531,27.962L73.939,22.859L73.939,38.385Z" style="fill:rgb(86,86,86);fill-rule:nonzero;"/>
21
+ </g>
22
+ <g id="a2YeZXbxK5" serif:id="a2YeZXbxK" transform="matrix(-1.71632,0,0,0.386532,-68.0238,147.164)">
23
+ <path d="M73.939,38.385L94.531,27.962L73.939,22.859L73.939,38.385Z" style="fill:rgb(86,86,86);fill-rule:nonzero;"/>
24
+ </g>
25
+ <g id="a2YeZXbxK6" serif:id="a2YeZXbxK" transform="matrix(-1.71632,0,0,0.386532,-68.0238,157.164)">
26
+ <path d="M73.939,38.385L94.531,27.962L73.939,22.859L73.939,38.385Z" style="fill:rgb(86,86,86);fill-rule:nonzero;"/>
27
+ </g>
28
+ <g id="a2YeZXbxK7" serif:id="a2YeZXbxK" transform="matrix(-1.71632,0,0,0.386532,-68.0238,167.164)">
29
+ <path d="M73.939,38.385L94.531,27.962L73.939,22.859L73.939,38.385Z" style="fill:rgb(86,86,86);fill-rule:nonzero;"/>
30
+ </g>
31
+ <g id="a2YeZXbxK8" serif:id="a2YeZXbxK" transform="matrix(-1.71632,0,0,0.386532,-68.0238,177.164)">
32
+ <path d="M73.939,38.385L94.531,27.962L73.939,22.859L73.939,38.385Z" style="fill:rgb(86,86,86);fill-rule:nonzero;"/>
33
+ </g>
34
+ </g>
35
+ </g>
36
+ <g transform="matrix(1,0,0,1,-404.578,86.5424)">
37
+ <text x="207.138px" y="105.168px" style="font-family:'Phosphate-Inline', 'Phosphate';font-size:130px;">F<tspan x="258.228px 339.608px 393.038px 465.058px 561.258px " y="105.168px 105.168px 105.168px 105.168px 105.168px ">ALCON</tspan></text>
38
+ </g>
39
+ </g>
40
+ <g id="Logo" transform="matrix(1,0,0,1,709.001,7.14337)">
41
+ <g transform="matrix(1,0,0,1,-292.6,1.20888)">
42
+ <path id="afwWrtpzn" d="M31.754,72.307L65.845,74.515L52.43,152.577L83.228,138.125L71.84,178.489L108.947,149.621L97.8,196.041L175.838,113.383L137.61,16.273L65.845,2.762L2.415,42.281L19.714,89.075L31.754,72.307Z" style="fill:rgb(86,86,86);fill-rule:nonzero;"/>
43
+ <path id="afwWrtpzn1" serif:id="afwWrtpzn" d="M31.754,72.307L65.845,74.515L52.43,152.577L83.228,138.125L71.84,178.489L108.947,149.621L97.8,196.041L175.838,113.383L137.61,16.273L65.845,2.762L2.415,42.281L19.714,89.075L31.754,72.307Z" style="fill-opacity:0;fill-rule:nonzero;stroke:black;stroke-width:4.83px;"/>
44
+ </g>
45
+ <g transform="matrix(1,0,0,1,-292.6,1.20888)">
46
+ <path id="f9Ro2kNLjt" d="M44.251,24.524L73.806,49.206L73.806,67.536L119.535,105.549L108.839,126.334L130.878,108.304L130.878,136.798L166.477,110.524L132.229,22.859L66.665,10.591L44.251,24.524Z" style="fill:rgb(102,102,102);fill-rule:nonzero;"/>
47
+ </g>
48
+ <g id="f9Ro2kNLjt1" serif:id="f9Ro2kNLjt" transform="matrix(1,0,0,1,-292.6,1.20888)">
49
+ <path d="M107.112,106.033L73.806,75.082L67.438,113.958L107.112,106.033Z" style="fill:url(#_Linear1);fill-rule:nonzero;"/>
50
+ </g>
51
+ <g transform="matrix(1,0,0,1,-292.6,1.20888)">
52
+ <path id="a2YeZXbxK9" serif:id="a2YeZXbxK" d="M74.965,38.385L94.531,27.962L73.939,22.859L65.06,28.963L74.965,38.385Z" style="fill:rgb(243,242,182);fill-rule:nonzero;stroke:black;stroke-width:4.83px;"/>
53
+ </g>
54
+ <g transform="matrix(1,0,0,1,-292.6,1.20888)">
55
+ <path id="bck4zTqCc" d="M31.138,70.92L66.327,70.003L66.665,53.621L34.89,25.682L4.551,43.331L20.728,83.297L31.138,70.92Z" style="fill:url(#_Linear2);fill-rule:nonzero;"/>
56
+ <path id="bck4zTqCc1" serif:id="bck4zTqCc" d="M31.138,70.92L66.327,70.003L66.665,53.621L34.89,25.682L4.551,43.331L20.728,83.297L31.138,70.92Z" style="fill-opacity:0;fill-rule:nonzero;stroke:black;stroke-width:4.83px;"/>
57
+ </g>
58
+ <g transform="matrix(1,0,0,1,-292.6,1.20888)">
59
+ <g opacity="0.5">
60
+ <path id="c8tH4sZd3" d="M38.69,39.748L29.642,38.747L34.058,35.779L38.69,39.748Z" style="fill-rule:nonzero;"/>
61
+ <path id="c8tH4sZd31" serif:id="c8tH4sZd3" d="M38.69,39.748L29.642,38.747L34.058,35.779L38.69,39.748Z" style="fill-opacity:0;fill-rule:nonzero;stroke:black;stroke-width:1.21px;"/>
62
+ </g>
63
+ </g>
64
+ <g id="b4jPLXq2Q" transform="matrix(1,0,0,1,-292.6,1.20888)">
65
+ <path d="M66.665,54.489L30.656,70.678" style="fill-opacity:0;fill-rule:nonzero;stroke:black;stroke-width:4.83px;"/>
66
+ </g>
67
+ <g id="biuXOi8NB" transform="matrix(1,0,0,1,-292.6,1.20888)">
68
+ <path d="M79.452,29.193L71.78,33.21L68.149,26.888L79.452,29.193Z" style="fill-rule:nonzero;"/>
69
+ </g>
70
+ <g id="biuXOi8NB1" serif:id="biuXOi8NB" transform="matrix(1,0,0,1,-292.6,1.20888)">
71
+ <path d="M79.452,29.193L71.78,33.21L68.149,26.888L79.452,29.193Z" style="fill-opacity:0;fill-rule:nonzero;stroke:black;stroke-width:1.21px;"/>
72
+ </g>
73
+ <g id="aBf8t1uYg" transform="matrix(1,0,0,1,-292.6,1.20888)">
74
+ <path d="M90.948,128.715L82.818,161.588L116.016,138.209L109.924,173.446L145.161,133.456L125.51,147.015L125.51,121.26L99.079,140.863L108.244,113.312L65.81,121.26L62.817,138.209L90.948,128.715Z" style="fill:url(#_Linear3);fill-rule:nonzero;"/>
75
+ </g>
76
+ </g>
77
+ <defs>
78
+ <linearGradient id="_Linear1" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(8.28147,40.3898,-40.3898,8.28147,75.559,73.5339)"><stop offset="0" style="stop-color:rgb(219,221,216);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(157,136,111);stop-opacity:1"/></linearGradient>
79
+ <linearGradient id="_Linear2" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-40.0703,32.5112,-32.5112,-40.0703,56.4664,35.6672)"><stop offset="0" style="stop-color:rgb(243,242,182);stop-opacity:1"/><stop offset="0.19" style="stop-color:rgb(178,177,142);stop-opacity:1"/><stop offset="0.4" style="stop-color:rgb(114,114,103);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(86,86,86);stop-opacity:1"/></linearGradient>
80
+ <linearGradient id="_Linear3" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(28.5157,44.2085,-44.2085,28.5157,93.954,114.461)"><stop offset="0" style="stop-color:rgb(159,139,114);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(138,105,90);stop-opacity:1"/></linearGradient>
81
+ </defs>
82
+ </svg>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: falcon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.6
4
+ version: 0.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-09 00:00:00.000000000 Z
11
+ date: 2018-08-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: async-io
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.27.0
33
+ version: 0.29.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.27.0
40
+ version: 0.29.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: async-container
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '1.3'
83
+ - !ruby/object:Gem::Dependency
84
+ name: localhost
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.1'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.1'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: async-rspec
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -179,12 +193,14 @@ files:
179
193
  - lib/falcon/adapters/rewindable.rb
180
194
  - lib/falcon/command.rb
181
195
  - lib/falcon/command/serve.rb
196
+ - lib/falcon/endpoint.rb
182
197
  - lib/falcon/hosts.rb
183
198
  - lib/falcon/proxy.rb
184
199
  - lib/falcon/server.rb
185
200
  - lib/falcon/verbose.rb
186
201
  - lib/falcon/version.rb
187
202
  - lib/rack/handler/falcon.rb
203
+ - logo.svg
188
204
  - server.rb
189
205
  homepage: https://github.com/socketry/falcon
190
206
  licenses: []