grpc_kit 0.1.1 → 0.1.2
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 +29 -2
- data/examples/helloworld_server.rb +1 -2
- data/examples/routeguide_server.rb +1 -2
- data/lib/grpc_kit/client.rb +4 -4
- data/lib/grpc_kit/server.rb +24 -18
- data/lib/grpc_kit/session/client.rb +2 -0
- data/lib/grpc_kit/session/duration.rb +4 -4
- data/lib/grpc_kit/session/headers.rb +1 -1
- data/lib/grpc_kit/session/io.rb +2 -0
- data/lib/grpc_kit/session/server.rb +6 -4
- data/lib/grpc_kit/version.rb +1 -1
- data/lib/grpc_kit.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: db6a319fa0f74330575752eb203e867d4882d869ec12f73643bf11bc3f147c8d
|
4
|
+
data.tar.gz: 376c711925c3f8534d7e286ed1bc7015ae711f7d4e2998b89fd8a2a2a2a0daac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6fa2789ac0febc6e8dfac1f57d59488d1ab4db39b32c0e529a3fb91240d890abe9021f65db6d539c0d8218dc89204ca284db3b1e302c02d5f2ff785e76d8e9a0
|
7
|
+
data.tar.gz: a8d7f9a5446308d2d31fcde7f4de762a262b58a6068ded6b8a60a0787d68001b7f2cd555a7910977ab9c8cf9e8d811cbbb2da76b55aa1d96b26961af3112be75
|
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# GrpcKit
|
2
2
|
|
3
|
-
|
3
|
+
__UNDER DEVELOPMENT__
|
4
|
+
|
5
|
+
A kit for creating [gRPC](https://grpc.io/) server/client.
|
4
6
|
|
5
7
|
## Installation
|
6
8
|
|
@@ -24,7 +26,32 @@ $ gem install grpc_kit
|
|
24
26
|
|
25
27
|
## Usage
|
26
28
|
|
27
|
-
|
29
|
+
More Details in [examples directory](https://github.com/ganmacs/grpc_kit/tree/master/examples).
|
30
|
+
|
31
|
+
##### Server
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
sock = TCPServer.new(50051)
|
35
|
+
server = GrpcKit::Server.new
|
36
|
+
server.handle(GreeterServer.new)
|
37
|
+
|
38
|
+
loop do
|
39
|
+
conn = sock.accept
|
40
|
+
server.run(conn)
|
41
|
+
end
|
42
|
+
```
|
43
|
+
|
44
|
+
##### Client
|
45
|
+
|
46
|
+
```ruby
|
47
|
+
stub = Helloworld::Greeter::Stub.new('localhost', 50051)
|
48
|
+
message = stub.say_hello(Helloworld::HelloRequest.new(name: 'your name')).message
|
49
|
+
puts message
|
50
|
+
```
|
51
|
+
|
52
|
+
## Requirements
|
53
|
+
|
54
|
+
* [nghttp2](https://nghttp2.org/)
|
28
55
|
|
29
56
|
## Development
|
30
57
|
|
data/lib/grpc_kit/client.rb
CHANGED
@@ -22,27 +22,27 @@ module GrpcKit
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def request_response(rpc, request, opts = {})
|
25
|
-
GrpcKit.logger.
|
25
|
+
GrpcKit.logger.debug('Calling request_respose')
|
26
26
|
|
27
27
|
rpc.config.interceptor.interceptors = @interceptors
|
28
28
|
do_request(rpc, request, opts)
|
29
29
|
end
|
30
30
|
|
31
31
|
def client_streamer(rpc, opts = {})
|
32
|
-
GrpcKit.logger.
|
32
|
+
GrpcKit.logger.debug('Calling client_streamer')
|
33
33
|
rpc.config.interceptor.interceptors = @interceptors
|
34
34
|
do_request(rpc, nil, opts)
|
35
35
|
end
|
36
36
|
|
37
37
|
def server_streamer(rpc, request, opts = {})
|
38
|
-
GrpcKit.logger.
|
38
|
+
GrpcKit.logger.debug('Calling server_streamer')
|
39
39
|
rpc.config.interceptor.interceptors = @interceptors
|
40
40
|
do_request(rpc, request, opts)
|
41
41
|
end
|
42
42
|
|
43
43
|
def bidi_streamer(rpc, requests, opts = {})
|
44
44
|
rpc.config.interceptor.interceptors = @interceptors
|
45
|
-
GrpcKit.logger.
|
45
|
+
GrpcKit.logger.debug('Calling bidi_streamer')
|
46
46
|
end
|
47
47
|
|
48
48
|
private
|
data/lib/grpc_kit/server.rb
CHANGED
@@ -9,6 +9,7 @@ module GrpcKit
|
|
9
9
|
@sessions = []
|
10
10
|
@rpc_descs = {}
|
11
11
|
@interceptors = interceptors
|
12
|
+
@mutex = Mutex.new
|
12
13
|
end
|
13
14
|
|
14
15
|
# @params handler [object]
|
@@ -22,27 +23,20 @@ module GrpcKit
|
|
22
23
|
end
|
23
24
|
end
|
24
25
|
|
25
|
-
def run
|
26
|
-
GrpcKit.logger.
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
def stop
|
32
|
-
GrpcKit.logger.info('Stop grpc_kit')
|
33
|
-
@sessions.each(&:stop)
|
26
|
+
def run(conn)
|
27
|
+
GrpcKit.logger.debug("Run grpc_kit(v#{GrpcKit::VERSION})")
|
28
|
+
establish_session(conn) do |s|
|
29
|
+
s.submit_settings([])
|
30
|
+
s.start
|
31
|
+
end
|
34
32
|
end
|
35
33
|
|
36
|
-
def
|
37
|
-
|
38
|
-
GrpcKit::Session::IO.new(conn),
|
39
|
-
self,
|
40
|
-
)
|
41
|
-
@sessions << session
|
34
|
+
def shutdown
|
35
|
+
GrpcKit.logger.debug('Shutdown grpc_kit')
|
42
36
|
|
43
|
-
|
44
|
-
|
45
|
-
|
37
|
+
@mutex.synchronize do
|
38
|
+
@sessions.each(&:finish)
|
39
|
+
end
|
46
40
|
end
|
47
41
|
|
48
42
|
def dispatch(stream, session)
|
@@ -53,5 +47,17 @@ module GrpcKit
|
|
53
47
|
|
54
48
|
rpc.invoke(stream, session)
|
55
49
|
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def establish_session(conn)
|
54
|
+
session = GrpcKit::Session::Server.new(GrpcKit::Session::IO.new(conn), self)
|
55
|
+
begin
|
56
|
+
@mutex.synchronize { @sessions << session }
|
57
|
+
yield(session)
|
58
|
+
ensure
|
59
|
+
@mutex.synchronize { @sessions.delete(session) }
|
60
|
+
end
|
61
|
+
end
|
56
62
|
end
|
57
63
|
end
|
@@ -17,11 +17,11 @@ module GrpcKit
|
|
17
17
|
raise "Invalid format: too short #{value}"
|
18
18
|
end
|
19
19
|
|
20
|
-
unit = value
|
20
|
+
unit = value.slice!(-1, 1)
|
21
21
|
d = Duration.new(0, 0, 0, 0)
|
22
|
-
n = Integer(value
|
22
|
+
n = Integer(value)
|
23
23
|
|
24
|
-
case
|
24
|
+
case unit
|
25
25
|
when 'H'
|
26
26
|
d.sec = n * HOUR
|
27
27
|
when 'M'
|
@@ -35,7 +35,7 @@ module GrpcKit
|
|
35
35
|
when 'n'
|
36
36
|
d.nsec = n
|
37
37
|
else
|
38
|
-
raise "Invalid unit `#{
|
38
|
+
raise "Invalid unit `#{unit}`: #{value + unit} "
|
39
39
|
end
|
40
40
|
d
|
41
41
|
end
|
@@ -45,7 +45,7 @@ module GrpcKit
|
|
45
45
|
when 'grpc-status'
|
46
46
|
self.grpc_status = val.to_i
|
47
47
|
when 'grpc-timeout'
|
48
|
-
self.timeout = Duration.
|
48
|
+
self.timeout = Duration.decode(val)
|
49
49
|
when 'grpc-message'
|
50
50
|
# TODO
|
51
51
|
GrpcKit.logger.warn('grpc-message is unsupported header now')
|
data/lib/grpc_kit/session/io.rb
CHANGED
@@ -36,6 +36,8 @@ module GrpcKit
|
|
36
36
|
|
37
37
|
run_once
|
38
38
|
end
|
39
|
+
rescue Errno::ECONNRESET, IOError
|
40
|
+
finish
|
39
41
|
end
|
40
42
|
|
41
43
|
def run_once
|
@@ -50,10 +52,6 @@ module GrpcKit
|
|
50
52
|
end
|
51
53
|
end
|
52
54
|
|
53
|
-
def stop
|
54
|
-
@stop = true
|
55
|
-
end
|
56
|
-
|
57
55
|
def finish
|
58
56
|
stop
|
59
57
|
@io.close
|
@@ -61,6 +59,10 @@ module GrpcKit
|
|
61
59
|
|
62
60
|
private
|
63
61
|
|
62
|
+
def stop
|
63
|
+
@stop = true
|
64
|
+
end
|
65
|
+
|
64
66
|
def invoke_handler
|
65
67
|
while (stream = @inflights.pop)
|
66
68
|
@handler.dispatch(stream, self)
|
data/lib/grpc_kit/version.rb
CHANGED
data/lib/grpc_kit.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grpc_kit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ganmacs
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-10-
|
11
|
+
date: 2018-10-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ds9
|