async-http 0.16.0 → 0.17.0
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/README.md +2 -3
- data/async-http.gemspec +2 -2
- data/lib/async/http/body.rb +20 -10
- data/lib/async/http/client.rb +2 -0
- data/lib/async/http/server.rb +2 -1
- data/lib/async/http/version.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5e36c2e4c547a2fab5f4080479acd7fd4964194ded2bf10b0e1f596f0cedcbe0
|
4
|
+
data.tar.gz: 0eb2ced279e0fa57db73b4bdc4fb8a450cc1440b95dd96a0c694d804bb11a45c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5f703f9ca20ef9a7c9675251f65575b0004de8e9757f2542167aaf330b6796522d5dcee0b219ffb528e388aee6970ae34aad18985d31f2e14821160d699245fc
|
7
|
+
data.tar.gz: ccf65ec4786912ec2636ad8c5ad13cac4e09c1b439c51c8b4efa342a11f03d4a7a78d807402fe608ad67a42d625b19a27a9d941e3f9c079c5d1c9a839c080783
|
data/README.md
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
# Async::HTTP
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
*This code is a proof-of-concept and not intended (yet) for production use.* The entire stack requires more scrutiny both in terms of performance and security.
|
3
|
+
An asynchronous client and server implementation of HTTP/1.0, HTTP/1.1 and HTTP/2.0 including TLS. Support for streaming requests and responses. Built on top of [async] and [async-io]. [falcon] provides a rack-compatible server.
|
6
4
|
|
7
5
|
[](http://travis-ci.org/socketry/async-http)
|
8
6
|
[](https://codeclimate.com/github/socketry/async-http)
|
@@ -10,6 +8,7 @@ A multi-process, multi-fiber HTTP client/server built on top of [async] and [asy
|
|
10
8
|
|
11
9
|
[async]: https://github.com/socketry/async
|
12
10
|
[async-io]: https://github.com/socketry/async-io
|
11
|
+
[falcon]: https://github.com/socketry/falcon
|
13
12
|
|
14
13
|
## Installation
|
15
14
|
|
data/async-http.gemspec
CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |spec|
|
|
7
7
|
spec.authors = ["Samuel Williams"]
|
8
8
|
spec.email = ["samuel.williams@oriontransfer.co.nz"]
|
9
9
|
|
10
|
-
spec.summary = ""
|
10
|
+
spec.summary = "A HTTP client and server library."
|
11
11
|
spec.homepage = "https://github.com/socketry/async-http"
|
12
12
|
|
13
13
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
@@ -17,7 +17,7 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.require_paths = ["lib"]
|
18
18
|
|
19
19
|
spec.add_dependency("async", "~> 1.5")
|
20
|
-
spec.add_dependency("async-io", "~> 1.
|
20
|
+
spec.add_dependency("async-io", "~> 1.7")
|
21
21
|
|
22
22
|
spec.add_dependency("http-2", "~> 0.8")
|
23
23
|
# spec.add_dependency("openssl")
|
data/lib/async/http/body.rb
CHANGED
@@ -22,11 +22,12 @@ require 'async/queue'
|
|
22
22
|
|
23
23
|
module Async
|
24
24
|
module HTTP
|
25
|
-
class Body
|
25
|
+
class Body
|
26
26
|
def initialize
|
27
|
-
|
27
|
+
@queue = Async::Queue.new
|
28
28
|
|
29
29
|
@finished = false
|
30
|
+
@stopped = false
|
30
31
|
end
|
31
32
|
|
32
33
|
def finished?
|
@@ -34,19 +35,26 @@ module Async
|
|
34
35
|
end
|
35
36
|
|
36
37
|
def each
|
38
|
+
return to_enum unless block_given?
|
39
|
+
|
37
40
|
return if @finished
|
38
41
|
|
39
|
-
while chunk =
|
42
|
+
while chunk = @queue.dequeue
|
40
43
|
yield chunk
|
41
44
|
end
|
45
|
+
rescue
|
46
|
+
# Stop the stream because the remote end is no longer reading from it. Any attempt to write to the stream will fail.
|
47
|
+
@stopped = $!
|
42
48
|
|
49
|
+
raise
|
50
|
+
ensure
|
43
51
|
@finished = true
|
44
52
|
end
|
45
53
|
|
46
54
|
def read
|
47
55
|
return if @finished
|
48
56
|
|
49
|
-
unless chunk =
|
57
|
+
unless chunk = @queue.dequeue
|
50
58
|
@finished = true
|
51
59
|
end
|
52
60
|
|
@@ -63,14 +71,18 @@ module Async
|
|
63
71
|
return buffer
|
64
72
|
end
|
65
73
|
|
66
|
-
alias join read
|
67
|
-
|
68
74
|
def write(chunk)
|
69
|
-
|
75
|
+
if @stopped
|
76
|
+
raise @stopped
|
77
|
+
end
|
78
|
+
|
79
|
+
# TODO should this yield if the queue is full?
|
80
|
+
|
81
|
+
@queue.enqueue(chunk)
|
70
82
|
end
|
71
83
|
|
72
84
|
def finish
|
73
|
-
|
85
|
+
@queue.enqueue(nil)
|
74
86
|
end
|
75
87
|
end
|
76
88
|
|
@@ -217,8 +229,6 @@ module Async
|
|
217
229
|
return buffer
|
218
230
|
end
|
219
231
|
|
220
|
-
alias join read
|
221
|
-
|
222
232
|
def finish
|
223
233
|
read
|
224
234
|
end
|
data/lib/async/http/client.rb
CHANGED
data/lib/async/http/server.rb
CHANGED
@@ -39,6 +39,8 @@ module Async
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def accept(peer, address, task: Task.current)
|
42
|
+
peer.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
|
43
|
+
|
42
44
|
stream = Async::IO::Stream.new(peer)
|
43
45
|
protocol = @protocol_class.server(stream)
|
44
46
|
|
@@ -56,7 +58,6 @@ module Async
|
|
56
58
|
end
|
57
59
|
rescue EOFError, Errno::ECONNRESET, Errno::EPIPE
|
58
60
|
# Sometimes client will disconnect without completing a result or reading the entire buffer.
|
59
|
-
return nil
|
60
61
|
ensure
|
61
62
|
peer.close
|
62
63
|
end
|
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.
|
4
|
+
version: 0.17.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-04-
|
11
|
+
date: 2018-04-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: async
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1.
|
33
|
+
version: '1.7'
|
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: '1.
|
40
|
+
version: '1.7'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: http-2
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -160,5 +160,5 @@ rubyforge_project:
|
|
160
160
|
rubygems_version: 2.7.6
|
161
161
|
signing_key:
|
162
162
|
specification_version: 4
|
163
|
-
summary:
|
163
|
+
summary: A HTTP client and server library.
|
164
164
|
test_files: []
|