async-http 0.46.2 → 0.46.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/async-http.gemspec +1 -1
- data/lib/async/http/protocol/http2.rb +3 -3
- data/lib/async/http/protocol/http2/connection.rb +0 -20
- data/lib/async/http/protocol/http2/request.rb +1 -2
- data/lib/async/http/protocol/http2/response.rb +1 -2
- data/lib/async/http/protocol/http2/stream.rb +38 -4
- data/lib/async/http/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1ba8a8a466d5347cf27a55b523dfa0b8faec5dbd88f0ddbd977c053333762bb9
|
4
|
+
data.tar.gz: 2675f68f80ee0ec638d5922de49710291208eb610f202b37595b5cc64a382465
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 627f99a4575491bf2141851f4873735ae4a4df76f50c54500e790df5a8f0b939b4e43c78088d148b43d2ea63be26f9941f6bdbe3be37175d0452ffdb4dcd40a4
|
7
|
+
data.tar.gz: 0be194518b6c9470037f0a1443fbd93669da82afb99392cd7e016c277f5c91f8cbecd3a24502b54f3d5f6b14a4bb13e1c16297a3087959e965d5b3621befcbed
|
data/async-http.gemspec
CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
|
22
22
|
spec.add_dependency("protocol-http", "~> 0.8.0")
|
23
23
|
spec.add_dependency("protocol-http1", "~> 0.8.0")
|
24
|
-
spec.add_dependency("protocol-http2", "~> 0.
|
24
|
+
spec.add_dependency("protocol-http2", "~> 0.9.0")
|
25
25
|
|
26
26
|
# spec.add_dependency("openssl")
|
27
27
|
|
@@ -34,14 +34,14 @@ module Async
|
|
34
34
|
CLIENT_SETTINGS = {
|
35
35
|
::Protocol::HTTP2::Settings::ENABLE_PUSH => 0,
|
36
36
|
::Protocol::HTTP2::Settings::MAXIMUM_FRAME_SIZE => 0x100000,
|
37
|
-
::Protocol::HTTP2::Settings::INITIAL_WINDOW_SIZE =>
|
37
|
+
::Protocol::HTTP2::Settings::INITIAL_WINDOW_SIZE => 0xF00000,
|
38
38
|
}
|
39
39
|
|
40
40
|
SERVER_SETTINGS = {
|
41
41
|
# We choose a lower maximum concurrent streams to avoid overloading a single connection/thread.
|
42
|
-
::Protocol::HTTP2::Settings::MAXIMUM_CONCURRENT_STREAMS =>
|
42
|
+
::Protocol::HTTP2::Settings::MAXIMUM_CONCURRENT_STREAMS => 128,
|
43
43
|
::Protocol::HTTP2::Settings::MAXIMUM_FRAME_SIZE => 0x100000,
|
44
|
-
::Protocol::HTTP2::Settings::INITIAL_WINDOW_SIZE =>
|
44
|
+
::Protocol::HTTP2::Settings::INITIAL_WINDOW_SIZE => 0xF00000,
|
45
45
|
::Protocol::HTTP2::Settings::ENABLE_CONNECT_PROTOCOL => 1,
|
46
46
|
}
|
47
47
|
|
@@ -123,26 +123,6 @@ module Async
|
|
123
123
|
def version
|
124
124
|
VERSION
|
125
125
|
end
|
126
|
-
|
127
|
-
# def encode_headers(headers, buffer = String.new.b)
|
128
|
-
# super.tap do |data|
|
129
|
-
# Async.logger.debug(self) do |buffer|
|
130
|
-
# buffer.puts "Encode headers: #{headers.inspect}"
|
131
|
-
# buffer.puts "-> #{data.inspect}"
|
132
|
-
# buffer.puts "@encoder: #{@encoder.inspect}"
|
133
|
-
# end
|
134
|
-
# end
|
135
|
-
# end
|
136
|
-
#
|
137
|
-
# def decode_headers(data)
|
138
|
-
# super.tap do |headers|
|
139
|
-
# Async.logger.debug(self) do |buffer|
|
140
|
-
# buffer.puts "Decode headers: #{data.inspect}"
|
141
|
-
# buffer.puts "-> #{headers.inspect}"
|
142
|
-
# buffer.puts "@decoder: #{@decoder.inspect}"
|
143
|
-
# end
|
144
|
-
# end
|
145
|
-
# end
|
146
126
|
end
|
147
127
|
end
|
148
128
|
end
|
@@ -19,13 +19,31 @@
|
|
19
19
|
# THE SOFTWARE.
|
20
20
|
|
21
21
|
require 'protocol/http2/stream'
|
22
|
+
require_relative '../../body/writable'
|
22
23
|
|
23
24
|
module Async
|
24
25
|
module HTTP
|
25
26
|
module Protocol
|
26
27
|
module HTTP2
|
27
28
|
class Stream < ::Protocol::HTTP2::Stream
|
28
|
-
class
|
29
|
+
class Input < Body::Writable
|
30
|
+
def initialize(stream, length)
|
31
|
+
super(length)
|
32
|
+
|
33
|
+
@stream = stream
|
34
|
+
end
|
35
|
+
|
36
|
+
def read
|
37
|
+
if chunk = super
|
38
|
+
# If we read a chunk fron the stream, we want to extend the window if required so more data will be provided.
|
39
|
+
@stream.request_window_update
|
40
|
+
end
|
41
|
+
|
42
|
+
return chunk
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
class Output
|
29
47
|
def initialize(stream, body, task: Task.current)
|
30
48
|
@stream = stream
|
31
49
|
|
@@ -37,6 +55,7 @@ module Async
|
|
37
55
|
@task = task.async(&self.method(:passthrough))
|
38
56
|
end
|
39
57
|
|
58
|
+
# Reads chunks from the given body and writes them to the stream as fast as possible.
|
40
59
|
def passthrough(task)
|
41
60
|
while chunk = self.read
|
42
61
|
maximum_size = @stream.available_frame_size
|
@@ -113,11 +132,11 @@ module Async
|
|
113
132
|
@headers = nil
|
114
133
|
@trailers = nil
|
115
134
|
|
116
|
-
# Input buffer (receive_data):
|
135
|
+
# Input buffer, reading request body, or response body (receive_data):
|
117
136
|
@length = nil
|
118
137
|
@input = nil
|
119
138
|
|
120
|
-
# Output buffer (window_updated):
|
139
|
+
# Output buffer, writing request body or response body (window_updated):
|
121
140
|
@output = nil
|
122
141
|
end
|
123
142
|
|
@@ -165,6 +184,21 @@ module Async
|
|
165
184
|
send_reset_stream(error.code)
|
166
185
|
end
|
167
186
|
|
187
|
+
def prepare_input(length)
|
188
|
+
if @input.nil?
|
189
|
+
@input = Input.new(self, length)
|
190
|
+
else
|
191
|
+
raise ArgumentError, "Input body already prepared!"
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
def update_local_window(frame)
|
196
|
+
consume_local_window(frame)
|
197
|
+
|
198
|
+
# This is done on demand.
|
199
|
+
# request_window_update
|
200
|
+
end
|
201
|
+
|
168
202
|
def process_data(frame)
|
169
203
|
data = frame.unpack
|
170
204
|
|
@@ -188,7 +222,7 @@ module Async
|
|
188
222
|
|
189
223
|
# Set the body and begin sending it.
|
190
224
|
def send_body(body)
|
191
|
-
@output =
|
225
|
+
@output = Output.new(self, body)
|
192
226
|
end
|
193
227
|
|
194
228
|
def window_updated(size)
|
data/lib/async/http/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: async-http
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.46.
|
4
|
+
version: 0.46.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Williams
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-07-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: async
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0.
|
75
|
+
version: 0.9.0
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0.
|
82
|
+
version: 0.9.0
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: async-rspec
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|