rpc-bench 0.0.1 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d37a1b9b71d4c41226d132a14cf626b104eba9b5
4
- data.tar.gz: 2798cf1d52f627983e32f789d1db29a2548e3ba8
3
+ metadata.gz: 197357f01e80f24d1ff3999dc1f189116d1b6088
4
+ data.tar.gz: 3a9fb7dd595fcfa8786c472681b4388ecc04e94d
5
5
  SHA512:
6
- metadata.gz: fa8940339142ecf4264fe0278445345df5a5d8442c38e9ce2e0d1ac83ad86ae001973226c17fbf9b767f4e9c1fe550c077fc8e7300b6726485ad53ac328828b1
7
- data.tar.gz: 0cead41d618f4d3b036e43e60af378dc4f8dbab6170d7417b931a5595a0e070a20b619dcf5fe208d994eae509b32e94b9f37fb8554e61fd2f469dcc0204cf881
6
+ metadata.gz: 21e47f7cf5dfad36ebb8534225b260d32a72c21904b8793b3640d503d66b0fb5e2c09ba68b34b7d36004f5cb44a4fc0df89027b6a13934605d399a1df2f3ab1e
7
+ data.tar.gz: 4141e3a126c7ef3fc1ce9f0d1d2208c0961c3b8f19e958e5b02705db6f896031799f0983a261708cdfb82738bbdd68fb242ff18689b12c4f1514613beb6397bb
data/.gitignore CHANGED
@@ -7,3 +7,5 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ .*.sw*
11
+ *.gem
data/README.md CHANGED
@@ -1,41 +1,83 @@
1
- # RpcBench
2
-
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/rpc_bench`. To experiment with that code, run `bin/console` for an interactive prompt.
4
-
5
- TODO: Delete this and the text above, and describe your gem
1
+ # RPCBench
2
+ RPCBench is a simple benchmark tool for RabbitMQ(AMQP, STOMP), ZeroMQ, gRPC.
3
+ For benchmarking RPC using these middleware, RPCBench using following library.
6
4
 
7
5
  ## Installation
6
+ You have to install some libraries which client of RPCBench uses.
7
+ This explanes the procedure to install them on Ubuntu14.04.
8
8
 
9
- Add this line to your application's Gemfile:
9
+ ### Install some packages
10
+ Some packages is needed to prepare following environment (e.g. building `libzmq` library).
11
+ ```
12
+ $ sudo apt-get install protobuf-compiler autoconf rabbitmq-server libtool
13
+ ```
10
14
 
11
- ```ruby
12
- gem 'rpc_bench'
15
+ ### for gRPC
16
+ Here is a procedure to install Ruby gems to benchmark gRPC.
17
+ ```
18
+ $ git clone https://github.com/grpc/grpc.git
19
+ $ cd grpc
20
+ $ bundle install
13
21
  ```
14
22
 
15
- And then execute:
23
+ ### for ZeroMQ
24
+ You have to install `libzmq` which is the library of ZeroMQ.
25
+ In this document, I'll show the procedure to install it from source code.
26
+ ```
27
+ $ git clone git@github.com:zeromq/libzmq.git
28
+ $ autoreconf -i
29
+ $ ./configure; make
30
+ $ sudo make install
31
+ ```
16
32
 
17
- $ bundle
33
+ ### for RabbitMQ (stomp)
34
+ To use rabbitmq-stomp plugin, you have to enable it from `rabbitmq-plugins` command like following and install Ruby gem of STOMP client.
35
+ ```
36
+ $ sudo rabbitmq-plugins enable rabbitmq_stomp
37
+ $ gem install stomp
38
+ ```
18
39
 
19
- Or install it yourself as:
40
+ ### RPCBench
41
+ Now, you have finished groundwork to benchmark using RPCBench.
42
+ Here is a way to install it.
20
43
 
21
- $ gem install rpc_bench
44
+ ```
45
+ $ gem install rpc_bench
46
+ ```
22
47
 
23
48
  ## Usage
24
49
 
25
- TODO: Write usage instructions here
26
-
27
- ## Development
28
-
29
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
30
-
31
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
50
+ ### Server
51
+ Here is the usage of server.
52
+ ```
53
+ Usage: rpc_bench_server [options]
54
+ -m, --mode m specify benchmark mode {rabbitmq|rabbitmq-stomp|newtmq|zeromq|grpc} [default: rabbitmq]
55
+ -s, --server s specify server to send request
56
+ -p, --port p specify port number on which server listens
57
+ ```
32
58
 
33
- ## Contributing
59
+ When you want to benchmark ZeroMQ, you execute `rpc_bench_server` command with `-m zeromq` which means 'ZeroMQ server mode'. And the parameter of `-p` means port number to listen.
60
+ ```
61
+ $ rpc_bench_server -m zeromq -p 20000
62
+ ```
34
63
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/rpc_bench. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
64
+ ### Client
65
+ Here is the usage of client.
66
+ ```
67
+ Usage: rpc_bench_client [options]
68
+ -m, --mode m specify benchmark mode {rabbitmq|rabbitmq-stomp|newtmq|zeromq|grpc} [default: rabbitmq]
69
+ -s, --server s specify server to send request
70
+ -p, --port p specify port number on which server listens
71
+ -c, --concurrency c specify concurrent level [default: 10]
72
+ -n, --number n specify request number per thread [default: 100]
73
+ ```
36
74
 
75
+ When you want to benchmark ZeroMQ, you do command `rpc_benchmark_client` command with `-m zeromq` in the same way.
76
+ Additionally, you can take some parameters that is `-c, --concurrency` and `-n, --number`.
77
+ The `--concurrency` means the number of threads to execute the processing to send request to server. And the `--number` means the number of requests to send request per thread.
78
+ ```
79
+ $ rpc_bench_client -m zeromq -p 20000 -c 16 -n 50000
80
+ ```
37
81
 
38
82
  ## License
39
-
40
83
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
41
-
data/bin/rpc_bench ADDED
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rpc_bench'
4
+
5
+ optobj = RPCBench::Options.new
6
+
7
+ begin
8
+ options = optobj.parse
9
+ rescue OptionParser::MissingArgument, OptionParser::InvalidOption => e
10
+ puts "[warning] failed to parse command line option (#{e})"
11
+ puts optobj.usage
12
+
13
+ exit 1
14
+ end
15
+
16
+ client = RPCBench::Client.new(options)
17
+
18
+ client.run
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rpc_bench'
4
+
5
+ optobj = RPCBench::ClientOptions.new
6
+
7
+ begin
8
+ options = optobj.parse
9
+ rescue OptionParser::MissingArgument, OptionParser::InvalidOption => e
10
+ puts "[warning] failed to parse command line option (#{e})"
11
+ puts optobj.usage
12
+
13
+ exit 1
14
+ end
15
+
16
+ client = RPCBench::Client.new(options)
17
+
18
+ client.run
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rpc_bench'
4
+
5
+ optobj = RPCBench::ServerOptions.new
6
+
7
+ begin
8
+ options = optobj.parse
9
+ rescue OptionParser::MissingArgument, OptionParser::InvalidOption => e
10
+ puts "[warning] failed to parse command line option (#{e})"
11
+ puts optobj.usage
12
+
13
+ exit 1
14
+ end
15
+
16
+ server = RPCBench::Server.new(options)
17
+
18
+ server.run
data/lib/rpc_bench.rb CHANGED
@@ -1,5 +1,13 @@
1
1
  require "rpc_bench/version"
2
+ require "rpc_bench/options"
3
+ require "rpc_bench/client"
4
+ require "rpc_bench/server"
5
+ require "rpc_bench/driver"
6
+ require "rpc_bench/driver_rabbitmq"
7
+ require "rpc_bench/driver_grpc"
8
+ require "rpc_bench/driver_zmq"
9
+ require "rpc_bench/driver_stomp"
2
10
 
3
- module RpcBench
11
+ module RPCBench
4
12
  # Your code goes here...
5
13
  end
@@ -0,0 +1,47 @@
1
+ module RPCBench
2
+ class Client
3
+ def initialize(opts)
4
+ @bench_conc = opts[:conc]
5
+ @bench_num = opts[:num]
6
+
7
+ case opts[:mode]
8
+ when 'rabbitmq'
9
+ @driver = RabbitMQ::Client.new opts
10
+ when 'grpc'
11
+ @driver = GRPC::Client.new opts
12
+ when 'zeromq'
13
+ @driver = ZeroMQ::Client.new opts
14
+ when 'stomp'
15
+ @driver = Stomp::Client.new opts
16
+ else
17
+ raise RuntimeError.new("failed to initialize driver of '#{opts[:mode]}'")
18
+ end
19
+ end
20
+
21
+ def validate? results
22
+ results.all? {|x| x == 2}
23
+ end
24
+
25
+ def run
26
+ t_start = Time.now
27
+
28
+ threads = []
29
+ (1..@bench_conc).each do |x|
30
+ threads << Thread.new do
31
+ @driver.send(1, @bench_num)
32
+ end
33
+ end
34
+
35
+ results = threads.map(&:value).flatten
36
+ unless(validate? results)
37
+ puts "[error] failed to get accurate result"
38
+ end
39
+
40
+ @driver.close
41
+
42
+ t_end = Time.now
43
+
44
+ puts "Time: #{t_end - t_start}"
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,19 @@
1
+ module RPCBench
2
+ class Driver
3
+ def set_handler handler
4
+ @handler = handler
5
+ end
6
+
7
+ def send(data, count)
8
+ begin
9
+ send_request(data, count)
10
+ rescue NameError => e
11
+ puts "[warning] failed to send request (#{e})"
12
+ end
13
+ end
14
+
15
+ def close
16
+ # nop
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,96 @@
1
+ require 'protobuf/message'
2
+ require 'protobuf/rpc/service'
3
+
4
+ require 'grpc'
5
+ require 'thread'
6
+
7
+ module RPCBench
8
+ module GRPC
9
+ SERVICE_NAME = 'rpc_bench'
10
+
11
+ ##
12
+ # Message Fields
13
+ #
14
+ class TmpRequest < Protobuf::Message
15
+ required :int32, :num, 1
16
+ end
17
+ class TmpReply < Protobuf::Message
18
+ required :int32, :num, 1
19
+ end
20
+
21
+ ##
22
+ # Service Classes
23
+ #
24
+ class ServiceCalc < Protobuf::Rpc::Service
25
+ rpc :calc_tmp, TmpRequest, TmpReply
26
+ end
27
+
28
+ class Calc
29
+ class Service
30
+ include ::GRPC::GenericService
31
+
32
+ self.marshal_class_method = :encode
33
+ self.unmarshal_class_method = :decode
34
+ self.service_name = SERVICE_NAME
35
+
36
+ rpc :CalcTmp, TmpRequest, TmpReply
37
+ end
38
+ Stub = Service.rpc_stub_class
39
+ end
40
+
41
+ class Client < Driver
42
+ def initialize opts
43
+ @opts = opts
44
+ end
45
+
46
+ def sendmsg stub, data
47
+ begin
48
+ stub.calc_tmp(RPCBench::GRPC::TmpRequest.new(num: data)).num
49
+ rescue ::GRPC::BadStatus => e
50
+ if(e.code == 8)
51
+ sendmsg stub, data
52
+ else
53
+ puts "[warning] other error is occurrs"
54
+ end
55
+ end
56
+ end
57
+
58
+ def send_request(data, count)
59
+ stub = RPCBench::GRPC::Calc::Stub.new("#{@opts[:host]}:#{@opts[:port]}", :this_channel_is_insecure)
60
+
61
+ results = []
62
+ (1..count).each do |_|
63
+ results << sendmsg(stub, data)
64
+ end
65
+
66
+ results
67
+ end
68
+ end
69
+ class Server < Driver
70
+ @@handler = nil
71
+
72
+ def initialize opts
73
+ @opts = opts
74
+ end
75
+
76
+ def self.handler
77
+ @@handler
78
+ end
79
+
80
+ def run
81
+ @@handler = @handler
82
+
83
+ s = ::GRPC::RpcServer.new
84
+ s.add_http2_port("#{@opts[:host]}:#{@opts[:port]}", :this_port_is_insecure)
85
+ s.handle(MyCalc)
86
+ s.run_till_terminated
87
+ end
88
+
89
+ class MyCalc < RPCBench::GRPC::Calc::Service
90
+ def calc_tmp(value, obj)
91
+ TmpReply.new(num: RPCBench::GRPC::Server.handler.callback(value.num))
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,64 @@
1
+ require 'bunny'
2
+
3
+ module RPCBench
4
+ module RabbitMQ
5
+ QNAME = 'rpc_queue'
6
+
7
+ class Client < Driver
8
+ def initialize opts
9
+ @opts = opts
10
+ end
11
+
12
+ def send_request data, count
13
+ results = []
14
+
15
+ conn = Bunny.new(host: @opts[:host], port: @opts[:port])
16
+ conn.start
17
+
18
+ ch = conn.create_channel
19
+ exchange = ch.default_exchange
20
+
21
+ reply_queue = ch.queue("", :exclusive => true)
22
+ (1..count).each do |_|
23
+ exchange.publish(data.to_s, :routing_key => RPCBench::RabbitMQ::QNAME, :reply_to => reply_queue.name)
24
+ end
25
+
26
+ reply_queue.subscribe(:block => true) do |dinfo, _, data|
27
+ results << data.to_i
28
+
29
+ if results.size >= count
30
+ dinfo.consumer.cancel
31
+ break
32
+ end
33
+ end
34
+ ch.close
35
+ conn.close
36
+
37
+ results
38
+ end
39
+ end
40
+ class Server < Driver
41
+ def initialize opts
42
+ @opts = opts
43
+ end
44
+
45
+ def run
46
+ conn = Bunny.new(host: @opts[:host], port: @opts[:port])
47
+ conn.start
48
+
49
+ ch = conn.create_channel
50
+
51
+ queue = ch.queue RPCBench::RabbitMQ::QNAME
52
+ exchange = ch.default_exchange
53
+ queue.subscribe(:block => true) do |_, attr, data|
54
+ resp = @handler.callback(data.to_i)
55
+
56
+ exchange.publish(resp.to_s, :routing_key => attr.reply_to, :correlation_id => attr.correlation_id)
57
+ end
58
+
59
+ ch.close
60
+ conn.close
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,48 @@
1
+ require 'stomp'
2
+
3
+ module RPCBench
4
+ module Stomp
5
+ QNAME = '/queue/rpc-bench'
6
+
7
+ class Client < Driver
8
+ TEMP_QNAME = '/temp-queue/rpc-bench'
9
+ def initialize opts
10
+ @opts = opts
11
+ end
12
+
13
+ def send_request data, count
14
+ results = []
15
+
16
+ conn = ::Stomp::Connection.open('guest', 'guest', @opts[:host], @opts[:port])
17
+ (1..count).each do |x|
18
+ conn.publish(RPCBench::Stomp::QNAME, data.to_s, {
19
+ 'reply-to' => TEMP_QNAME
20
+ })
21
+ end
22
+ (1..count).each do |_|
23
+ results << conn.receive.body.slice(/[0-9]*/).to_i
24
+ end
25
+ conn.disconnect
26
+
27
+ results
28
+ end
29
+ end
30
+ class Server < Driver
31
+ def initialize opts
32
+ @opts = opts
33
+ end
34
+
35
+ def run
36
+ conn = ::Stomp::Connection.open('guest', 'guest', @opts[:host], @opts[:port])
37
+
38
+ conn.subscribe RPCBench::Stomp::QNAME
39
+ loop do
40
+ msg = conn.receive
41
+ reply = @handler.callback(msg.body.to_i)
42
+
43
+ conn.publish(msg.headers['reply-to'], reply.to_s)
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,62 @@
1
+ require 'ffi-rzmq'
2
+
3
+ module RPCBench
4
+ module ZeroMQ
5
+ class Base < Driver
6
+ def initialize opts
7
+ @opts = opts
8
+ @context = ZMQ::Context.new
9
+ end
10
+ end
11
+ class Client < Base
12
+ def initialize opts
13
+ super opts
14
+ end
15
+
16
+ def send_request data, count
17
+ sock = @context.socket(ZMQ::REQ)
18
+ sock.connect("tcp://#{@opts[:host]}:#{@opts[:port]}")
19
+
20
+ results = []
21
+ (1..count).each do |_|
22
+ # sending request
23
+ sock.send_string data.to_s
24
+
25
+ # receiving reply
26
+ reply = ''
27
+ sock.recv_string(reply)
28
+
29
+ results << reply.slice(/[0-9]+/).to_i
30
+ end
31
+ sock.close
32
+
33
+ results
34
+ end
35
+
36
+ def close
37
+ @context.terminate
38
+ end
39
+ end
40
+ class Server < Base
41
+ def initialize opts
42
+ super opts
43
+ end
44
+
45
+ def run
46
+ sock = @context.socket(ZMQ::REP)
47
+ sock.bind("tcp://*:#{@opts[:port]}")
48
+
49
+ loop do
50
+ request = ''
51
+
52
+ sock.recv_string(request)
53
+
54
+ data = request.inspect.slice(/[0-9]+/).to_i
55
+
56
+ # Send reply back to client
57
+ sock.send_string(@handler.callback(data).to_s)
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,73 @@
1
+ require "optparse"
2
+
3
+ module RPCBench
4
+ class Options
5
+ MODE_VALUES = ['rabbitmq', 'stomp', 'zeromq', 'grpc']
6
+
7
+ OPT_DEFAULT = {
8
+ :host => 'localhost',
9
+ :port => 5672,
10
+ :mode => 'rabbitmq',
11
+ }
12
+ def initialize
13
+ def sets(key, short, long, desc)
14
+ @opt.on(short, long, desc) {|v| @options[key] = v}
15
+ end
16
+ def setn(key, short, long, desc)
17
+ @opt.on(short, long, desc) {|v| @options[key] = v.to_i}
18
+ end
19
+
20
+ @options = OPT_DEFAULT
21
+ @opt = OptionParser.new
22
+
23
+ sets(:mode, '-m', '--mode m',
24
+ 'specify benchmark mode {rabbitmq|rabbitmq-stomp|newtmq|zeromq|grpc} [default: rabbitmq]')
25
+ sets(:host, '-s', '--server s',
26
+ 'specify server to send request')
27
+ setn(:port, '-p', '--port p',
28
+ 'specify port number on which server listens')
29
+ end
30
+
31
+ def parse
32
+ @opt.parse!(ARGV)
33
+
34
+ raise OptionParser::InvalidOption.new('validation failed') unless validated?
35
+
36
+ @options
37
+ end
38
+
39
+ def usage
40
+ @opt.help
41
+ end
42
+
43
+ private
44
+ def validated?
45
+ ret = true
46
+
47
+ ret &= MODE_VALUES.include? @options[:mode]
48
+ ret &= @options[:conc].is_a? Integer
49
+ ret &= @options[:num].is_a? Integer
50
+ end
51
+ end
52
+
53
+ class ServerOptions < Options
54
+ def initialize
55
+ super
56
+ end
57
+ end
58
+ class ClientOptions < Options
59
+ OPT_DEFAULT.merge!({
60
+ :conc => 10,
61
+ :num => 100,
62
+ })
63
+
64
+ def initialize
65
+ super
66
+
67
+ setn(:conc, '-c', '--concurrency c',
68
+ 'specify concurrent level [default: 10]')
69
+ setn(:num, '-n', '--number n',
70
+ 'specify request number per thread [default: 100]')
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,28 @@
1
+ module RPCBench
2
+ class Server
3
+ def initialize(opts)
4
+ case opts[:mode]
5
+ when 'rabbitmq'
6
+ @driver = RabbitMQ::Server.new opts
7
+ when 'grpc'
8
+ @driver = GRPC::Server.new opts
9
+ when 'zeromq'
10
+ @driver = ZeroMQ::Server.new opts
11
+ when 'stomp'
12
+ @driver = Stomp::Server.new opts
13
+ else
14
+ raise RuntimeError.new("failed to initialize driver of '#{opts[:mode]}'")
15
+ end
16
+
17
+ @driver.set_handler self
18
+ end
19
+
20
+ def run
21
+ @driver.run
22
+ end
23
+
24
+ def callback(v)
25
+ v.to_i + 1
26
+ end
27
+ end
28
+ end
@@ -1,3 +1,3 @@
1
- module RpcBench
2
- VERSION = "0.0.1"
1
+ module RPCBench
2
+ VERSION = "0.1.0"
3
3
  end
data/rpc_bench.gemspec CHANGED
@@ -5,7 +5,7 @@ require 'rpc_bench/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "rpc-bench"
8
- spec.version = RpcBench::VERSION
8
+ spec.version = RPCBench::VERSION
9
9
  spec.authors = ["Hiroyasu OHYAMA"]
10
10
  spec.email = ["user.localhost2000@gmail.com"]
11
11
 
@@ -17,4 +17,11 @@ Gem::Specification.new do |spec|
17
17
  spec.bindir = "bin"
18
18
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
19
  spec.require_paths = ["lib"]
20
+
21
+ spec.add_runtime_dependency "grpc", "0.14.1"
22
+ spec.add_runtime_dependency "grpc-tools", "0.14.1"
23
+ spec.add_runtime_dependency "stomp", "1.4.0"
24
+ spec.add_runtime_dependency "bunny", "2.3.1"
25
+ spec.add_runtime_dependency "ffi-rzmq", "2.0.4"
26
+ spec.add_runtime_dependency "protobuf", "3.6.9"
20
27
  end
metadata CHANGED
@@ -1,19 +1,106 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rpc-bench
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hiroyasu OHYAMA
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-13 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2016-06-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: grpc
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 0.14.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 0.14.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: grpc-tools
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 0.14.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 0.14.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: stomp
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '='
46
+ - !ruby/object:Gem::Version
47
+ version: 1.4.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '='
53
+ - !ruby/object:Gem::Version
54
+ version: 1.4.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: bunny
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 2.3.1
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 2.3.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: ffi-rzmq
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 2.0.4
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '='
81
+ - !ruby/object:Gem::Version
82
+ version: 2.0.4
83
+ - !ruby/object:Gem::Dependency
84
+ name: protobuf
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '='
88
+ - !ruby/object:Gem::Version
89
+ version: 3.6.9
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '='
95
+ - !ruby/object:Gem::Version
96
+ version: 3.6.9
13
97
  description:
14
98
  email:
15
99
  - user.localhost2000@gmail.com
16
- executables: []
100
+ executables:
101
+ - rpc_bench
102
+ - rpc_bench_client
103
+ - rpc_bench_server
17
104
  extensions: []
18
105
  extra_rdoc_files: []
19
106
  files:
@@ -23,7 +110,18 @@ files:
23
110
  - LICENSE.txt
24
111
  - README.md
25
112
  - Rakefile
113
+ - bin/rpc_bench
114
+ - bin/rpc_bench_client
115
+ - bin/rpc_bench_server
26
116
  - lib/rpc_bench.rb
117
+ - lib/rpc_bench/client.rb
118
+ - lib/rpc_bench/driver.rb
119
+ - lib/rpc_bench/driver_grpc.rb
120
+ - lib/rpc_bench/driver_rabbitmq.rb
121
+ - lib/rpc_bench/driver_stomp.rb
122
+ - lib/rpc_bench/driver_zmq.rb
123
+ - lib/rpc_bench/options.rb
124
+ - lib/rpc_bench/server.rb
27
125
  - lib/rpc_bench/version.rb
28
126
  - rpc_bench.gemspec
29
127
  homepage: https://github.com/userlocalhost2000/rpc_bench