net-http2 0.15.0 → 0.18.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 +5 -5
- data/.tool-versions +1 -0
- data/.travis.yml +7 -4
- data/README.md +4 -4
- data/lib/net-http2.rb +0 -2
- data/lib/net-http2/client.rb +14 -2
- data/lib/net-http2/request.rb +2 -1
- data/lib/net-http2/version.rb +1 -1
- data/net-http2.gemspec +3 -3
- metadata +20 -23
- data/.ruby-gemset +0 -1
- data/.ruby-version +0 -1
- data/lib/http2_patch.rb +0 -49
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 47851ec1e94857e836b5e282289ee6295903bf37ad86ea6922d100eac62d002b
|
4
|
+
data.tar.gz: 7f2e870165baf00d5cd6cc5c5e42915a7f918f0567ce446c14aec0dd5f011a32
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ace452983904e4c82024a59bb8222bc31eb44f8251402a21dee6f6e1395e57c18fd02ee6677e43415f9af5a15dafd510de3eebd54769926fa5ed42de79bc2978
|
7
|
+
data.tar.gz: f409ce5ec39eb3a565095cb4831cb04153153d308abeeea75fcac010f07fa48cf9100ee1e7cc925e68fa0d8b50d3c56c96fd030835a6aacf07d37c5d8e673344
|
data/.tool-versions
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby 2.7.1
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -59,7 +59,7 @@ request.on(:close) { puts "request completed!" }
|
|
59
59
|
client.call_async(request)
|
60
60
|
|
61
61
|
# Wait for all outgoing stream to be closed
|
62
|
-
client.join
|
62
|
+
client.join(timeout: 5)
|
63
63
|
|
64
64
|
# close the connection
|
65
65
|
client.close
|
@@ -103,7 +103,7 @@ Allows to set a callback for the client. The only available event is `:error`, w
|
|
103
103
|
client.on(:error) { |exception| puts "Exception has been raised: #{exception}" }
|
104
104
|
```
|
105
105
|
|
106
|
-
> It is RECOMMENDED to set the `:error` callback: if none is defined, the underlying socket thread may raise an error in the main thread at unexpected execution times.
|
106
|
+
> It is RECOMMENDED to set the `:error` callback: if none is defined, the underlying socket thread may raise an error in the main thread at unexpected execution times.
|
107
107
|
|
108
108
|
* **uri** → **`URI`**
|
109
109
|
|
@@ -140,9 +140,9 @@ The real benefit of HTTP/2 is being able to receive body and header streams. Ins
|
|
140
140
|
|
141
141
|
Calls the server with the async request.
|
142
142
|
|
143
|
-
* **join**
|
143
|
+
* **join(timeout:)**
|
144
144
|
|
145
|
-
Wait for all outstanding requests to be completed.
|
145
|
+
Wait for all outstanding requests to be completed, optionally with a timeout for this condition to be met. Raises NetHttp2::AsyncRequestTimeout if the timeout is reached.
|
146
146
|
|
147
147
|
|
148
148
|
### `NetHttp2::Request`
|
data/lib/net-http2.rb
CHANGED
data/lib/net-http2/client.rb
CHANGED
@@ -8,6 +8,8 @@ module NetHttp2
|
|
8
8
|
DRAFT = 'h2'
|
9
9
|
PROXY_SETTINGS_KEYS = [:proxy_addr, :proxy_port, :proxy_user, :proxy_pass]
|
10
10
|
|
11
|
+
AsyncRequestTimeout = Class.new(StandardError)
|
12
|
+
|
11
13
|
class Client
|
12
14
|
|
13
15
|
include Callbacks
|
@@ -54,12 +56,22 @@ module NetHttp2
|
|
54
56
|
init_vars
|
55
57
|
end
|
56
58
|
|
57
|
-
def join
|
59
|
+
def join(timeout: nil)
|
60
|
+
starting_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
58
61
|
while !@streams.empty? do
|
62
|
+
raise AsyncRequestTimeout if timeout && Process.clock_gettime(Process::CLOCK_MONOTONIC) - starting_time > timeout
|
59
63
|
sleep 0.05
|
60
64
|
end
|
61
65
|
end
|
62
66
|
|
67
|
+
def remote_settings
|
68
|
+
h2.remote_settings
|
69
|
+
end
|
70
|
+
|
71
|
+
def stream_count
|
72
|
+
@streams.length
|
73
|
+
end
|
74
|
+
|
63
75
|
private
|
64
76
|
|
65
77
|
def init_vars
|
@@ -75,7 +87,7 @@ module NetHttp2
|
|
75
87
|
end
|
76
88
|
|
77
89
|
def new_stream
|
78
|
-
NetHttp2::Stream.new(h2_stream: h2.new_stream)
|
90
|
+
@mutex.synchronize { NetHttp2::Stream.new(h2_stream: h2.new_stream) }
|
79
91
|
rescue StandardError => e
|
80
92
|
close
|
81
93
|
raise e
|
data/lib/net-http2/request.rb
CHANGED
data/lib/net-http2/version.rb
CHANGED
data/net-http2.gemspec
CHANGED
@@ -19,9 +19,9 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
20
|
spec.require_paths = ["lib"]
|
21
21
|
|
22
|
-
spec.add_dependency "http-2", "0.
|
22
|
+
spec.add_dependency "http-2", "~> 0.10.1"
|
23
23
|
|
24
|
-
spec.add_development_dependency "bundler"
|
25
|
-
spec.add_development_dependency "rake", "
|
24
|
+
spec.add_development_dependency "bundler"
|
25
|
+
spec.add_development_dependency "rake", ">= 12.3.3"
|
26
26
|
spec.add_development_dependency "rspec", "~> 3.0"
|
27
27
|
end
|
metadata
CHANGED
@@ -1,57 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: net-http2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.18.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roberto Ostinelli
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-09-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: http-2
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.10.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.10.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '0'
|
34
34
|
type: :development
|
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: '
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 12.3.3
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 12.3.3
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '3.0'
|
69
|
-
description:
|
69
|
+
description:
|
70
70
|
email:
|
71
71
|
- roberto@ostinelli.net
|
72
72
|
executables: []
|
@@ -75,8 +75,7 @@ extra_rdoc_files: []
|
|
75
75
|
files:
|
76
76
|
- ".gitignore"
|
77
77
|
- ".rspec"
|
78
|
-
- ".
|
79
|
-
- ".ruby-version"
|
78
|
+
- ".tool-versions"
|
80
79
|
- ".travis.yml"
|
81
80
|
- Gemfile
|
82
81
|
- LICENSE.md
|
@@ -84,7 +83,6 @@ files:
|
|
84
83
|
- Rakefile
|
85
84
|
- bin/console
|
86
85
|
- bin/setup
|
87
|
-
- lib/http2_patch.rb
|
88
86
|
- lib/net-http2.rb
|
89
87
|
- lib/net-http2/callbacks.rb
|
90
88
|
- lib/net-http2/client.rb
|
@@ -98,7 +96,7 @@ homepage: http://github.com/ostinelli/net-http2
|
|
98
96
|
licenses:
|
99
97
|
- MIT
|
100
98
|
metadata: {}
|
101
|
-
post_install_message:
|
99
|
+
post_install_message:
|
102
100
|
rdoc_options: []
|
103
101
|
require_paths:
|
104
102
|
- lib
|
@@ -113,9 +111,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
113
111
|
- !ruby/object:Gem::Version
|
114
112
|
version: '0'
|
115
113
|
requirements: []
|
116
|
-
|
117
|
-
|
118
|
-
signing_key:
|
114
|
+
rubygems_version: 3.1.2
|
115
|
+
signing_key:
|
119
116
|
specification_version: 4
|
120
117
|
summary: NetHttp2 is an HTTP2 client for Ruby.
|
121
118
|
test_files: []
|
data/.ruby-gemset
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
net-http2
|
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
ruby-2.3.1
|
data/lib/http2_patch.rb
DELETED
@@ -1,49 +0,0 @@
|
|
1
|
-
require 'http/2/connection'
|
2
|
-
|
3
|
-
# We are currently locked to using the Http2 library v0.8.2 since v0.8.3 still has some compatibility issues:
|
4
|
-
# <https://github.com/igrigorik/http-2/issues/92>
|
5
|
-
#
|
6
|
-
# However, v0.8.2 had a memory leak that was reported in the following issues:
|
7
|
-
# <https://github.com/igrigorik/http-2/issues/73>
|
8
|
-
# <https://github.com/ostinelli/net-http2/issues/7>
|
9
|
-
#
|
10
|
-
# Hence, this is a temporary monkey-patch to the HTTP2 library in order to solve the mentioned leak
|
11
|
-
# while waiting to fix the issues on v0.8.3.
|
12
|
-
|
13
|
-
module HTTP2
|
14
|
-
|
15
|
-
class Connection
|
16
|
-
|
17
|
-
private
|
18
|
-
|
19
|
-
def activate_stream(id: nil, **args)
|
20
|
-
connection_error(msg: 'Stream ID already exists') if @streams.key?(id)
|
21
|
-
|
22
|
-
stream = Stream.new({ connection: self, id: id }.merge(args))
|
23
|
-
|
24
|
-
# Streams that are in the "open" state, or either of the "half closed"
|
25
|
-
# states count toward the maximum number of streams that an endpoint is
|
26
|
-
# permitted to open.
|
27
|
-
stream.once(:active) { @active_stream_count += 1 }
|
28
|
-
|
29
|
-
@streams_recently_closed ||= {}
|
30
|
-
stream.once(:close) do
|
31
|
-
@active_stream_count -= 1
|
32
|
-
|
33
|
-
@streams_recently_closed.delete_if do |closed_stream_id, v|
|
34
|
-
to_be_deleted = (Time.now - v) > 15
|
35
|
-
@streams.delete(closed_stream_id) if to_be_deleted
|
36
|
-
to_be_deleted
|
37
|
-
end
|
38
|
-
|
39
|
-
@streams_recently_closed[id] = Time.now
|
40
|
-
end
|
41
|
-
|
42
|
-
stream.on(:promise, &method(:promise)) if self.is_a? Server
|
43
|
-
stream.on(:frame, &method(:send))
|
44
|
-
stream.on(:window_update, &method(:window_update))
|
45
|
-
|
46
|
-
@streams[id] = stream
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|