rpc-bench 0.0.1 → 0.1.0

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