grpc_kit 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|