protobuf 2.2.5-java
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.
- data/.gitignore +17 -0
- data/.travis.yml +9 -0
- data/.yardopts +5 -0
- data/Gemfile +3 -0
- data/README.md +316 -0
- data/Rakefile +29 -0
- data/UPGRADING.md +60 -0
- data/bin/rpc_server +5 -0
- data/bin/rprotoc +62 -0
- data/examples/addressbook.pb.rb +55 -0
- data/examples/addressbook.proto +24 -0
- data/examples/reading_a_message.rb +32 -0
- data/examples/writing_a_message.rb +46 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/code_generator.h +142 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/command_line_interface.h +318 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_enum.h +99 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_enum_field.h +103 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_extension.h +85 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_field.h +167 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_file.h +98 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_generator.h +72 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_helpers.h +159 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_message.h +170 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_message_field.h +102 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_primitive_field.h +103 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_service.h +118 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_string_field.h +104 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.h +2721 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/importer.h +303 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_enum.h +84 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_enum_field.h +121 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_extension.h +77 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_field.h +108 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_file.h +101 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_generator.h +72 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_helpers.h +213 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_message.h +109 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_message_field.h +134 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_primitive_field.h +121 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_service.h +113 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_string_field.h +120 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/mock_code_generator.h +113 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/package_info.h +64 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/parser.h +434 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/plugin.h +73 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/plugin.pb.h +790 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/python/python_generator.h +156 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/subprocess.h +108 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/compiler/zip_writer.h +93 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/descriptor.h +1367 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/descriptor.pb.h +5223 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/descriptor_database.h +366 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/dynamic_message.h +136 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/extension_set.h +904 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/generated_message_reflection.h +424 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/generated_message_util.h +82 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/io/coded_stream.h +1102 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/io/coded_stream_inl.h +64 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/io/gzip_stream.h +207 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/io/package_info.h +54 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/io/printer.h +136 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/io/tokenizer.h +313 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/io/zero_copy_stream.h +238 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/io/zero_copy_stream_impl.h +357 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/io/zero_copy_stream_impl_lite.h +340 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/message.h +692 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/message_lite.h +239 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/package_info.h +64 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/reflection_ops.h +80 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/repeated_field.h +1295 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/service.h +291 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/stubs/common.h +1211 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/stubs/hash.h +220 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/stubs/map-util.h +119 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/stubs/once.h +123 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/stubs/stl_util-inl.h +121 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/stubs/strutil.h +457 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/stubs/substitute.h +170 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/test_util.h +174 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/test_util_lite.h +101 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/testing/file.h +83 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/testing/googletest.h +98 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/text_format.h +285 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/unittest.pb.h +11915 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/unittest_custom_options.pb.h +2895 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/unittest_embed_optimize_for.pb.h +211 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/unittest_empty.pb.h +56 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/unittest_import.pb.h +188 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/unittest_import_lite.pb.h +151 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/unittest_lite.pb.h +4752 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/unittest_lite_imports_nonlite.pb.h +150 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/unittest_mset.pb.h +816 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/unittest_no_generic_services.pb.h +197 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/unittest_optimize_for.pb.h +403 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/unknown_field_set.h +268 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/wire_format.h +304 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/wire_format_lite.h +620 -0
- data/ext/protobuf-2.4.1/src/google/protobuf/wire_format_lite_inl.h +774 -0
- data/ext/ruby_generator/Makefile +10 -0
- data/ext/ruby_generator/RubyGenerator.cpp +450 -0
- data/ext/ruby_generator/RubyGenerator.h +199 -0
- data/ext/ruby_generator/extconf.rb +36 -0
- data/ext/ruby_generator/protoc-ruby +0 -0
- data/lib/protobuf/cli.rb +188 -0
- data/lib/protobuf/enum.rb +58 -0
- data/lib/protobuf/enum_value.rb +59 -0
- data/lib/protobuf/evented.rb +22 -0
- data/lib/protobuf/exceptions.rb +11 -0
- data/lib/protobuf/ext/eventmachine.rb +14 -0
- data/lib/protobuf/field/base_field.rb +240 -0
- data/lib/protobuf/field/bool_field.rb +36 -0
- data/lib/protobuf/field/bytes_field.rb +38 -0
- data/lib/protobuf/field/double_field.rb +19 -0
- data/lib/protobuf/field/enum_field.rb +50 -0
- data/lib/protobuf/field/extension_fields.rb +32 -0
- data/lib/protobuf/field/field_array.rb +65 -0
- data/lib/protobuf/field/fixed32_field.rb +19 -0
- data/lib/protobuf/field/fixed64_field.rb +22 -0
- data/lib/protobuf/field/float_field.rb +31 -0
- data/lib/protobuf/field/int32_field.rb +12 -0
- data/lib/protobuf/field/int64_field.rb +12 -0
- data/lib/protobuf/field/integer_field.rb +19 -0
- data/lib/protobuf/field/message_field.rb +53 -0
- data/lib/protobuf/field/sfixed32_field.rb +21 -0
- data/lib/protobuf/field/sfixed64_field.rb +24 -0
- data/lib/protobuf/field/signed_integer_field.rb +23 -0
- data/lib/protobuf/field/sint32_field.rb +12 -0
- data/lib/protobuf/field/sint64_field.rb +12 -0
- data/lib/protobuf/field/string_field.rb +14 -0
- data/lib/protobuf/field/uint32_field.rb +12 -0
- data/lib/protobuf/field/uint64_field.rb +12 -0
- data/lib/protobuf/field/varint_field.rb +61 -0
- data/lib/protobuf/field.rb +57 -0
- data/lib/protobuf/logger.rb +86 -0
- data/lib/protobuf/message/decoder.rb +83 -0
- data/lib/protobuf/message/encoder.rb +48 -0
- data/lib/protobuf/message/extend.rb +8 -0
- data/lib/protobuf/message/message.rb +1 -0
- data/lib/protobuf/message.rb +320 -0
- data/lib/protobuf/rpc/buffer.rb +79 -0
- data/lib/protobuf/rpc/client.rb +166 -0
- data/lib/protobuf/rpc/connector.rb +19 -0
- data/lib/protobuf/rpc/connectors/base.rb +38 -0
- data/lib/protobuf/rpc/connectors/common.rb +156 -0
- data/lib/protobuf/rpc/connectors/em_client.rb +84 -0
- data/lib/protobuf/rpc/connectors/eventmachine.rb +87 -0
- data/lib/protobuf/rpc/connectors/socket.rb +73 -0
- data/lib/protobuf/rpc/connectors/zmq.rb +69 -0
- data/lib/protobuf/rpc/error/client_error.rb +31 -0
- data/lib/protobuf/rpc/error/server_error.rb +43 -0
- data/lib/protobuf/rpc/error.rb +25 -0
- data/lib/protobuf/rpc/rpc.pb.rb +118 -0
- data/lib/protobuf/rpc/server.rb +89 -0
- data/lib/protobuf/rpc/servers/evented/server.rb +41 -0
- data/lib/protobuf/rpc/servers/evented_runner.rb +21 -0
- data/lib/protobuf/rpc/servers/socket/server.rb +111 -0
- data/lib/protobuf/rpc/servers/socket/worker.rb +66 -0
- data/lib/protobuf/rpc/servers/socket_runner.rb +27 -0
- data/lib/protobuf/rpc/servers/zmq/broker.rb +87 -0
- data/lib/protobuf/rpc/servers/zmq/server.rb +50 -0
- data/lib/protobuf/rpc/servers/zmq/util.rb +27 -0
- data/lib/protobuf/rpc/servers/zmq/worker.rb +60 -0
- data/lib/protobuf/rpc/servers/zmq_runner.rb +25 -0
- data/lib/protobuf/rpc/service.rb +173 -0
- data/lib/protobuf/rpc/service_dispatcher.rb +130 -0
- data/lib/protobuf/rpc/service_filters.rb +267 -0
- data/lib/protobuf/rpc/stat.rb +83 -0
- data/lib/protobuf/socket.rb +22 -0
- data/lib/protobuf/version.rb +4 -0
- data/lib/protobuf/wire_type.rb +10 -0
- data/lib/protobuf/zmq.rb +21 -0
- data/lib/protobuf.rb +86 -0
- data/proto/rpc.pb.rb +48 -0
- data/proto/rpc.proto +73 -0
- data/protobuf.gemspec +44 -0
- data/spec/benchmark/tasks.rb +179 -0
- data/spec/functional/embedded_service_spec.rb +7 -0
- data/spec/functional/evented_server_spec.rb +64 -0
- data/spec/functional/socket_server_spec.rb +58 -0
- data/spec/functional/zmq_server_spec.rb +58 -0
- data/spec/lib/protobuf/cli_spec.rb +212 -0
- data/spec/lib/protobuf/enum_spec.rb +98 -0
- data/spec/lib/protobuf/enum_value_spec.rb +15 -0
- data/spec/lib/protobuf/logger_spec.rb +131 -0
- data/spec/lib/protobuf/message/encoder_spec.rb +19 -0
- data/spec/lib/protobuf/message_spec.rb +209 -0
- data/spec/lib/protobuf/rpc/client_spec.rb +158 -0
- data/spec/lib/protobuf/rpc/connector_spec.rb +32 -0
- data/spec/lib/protobuf/rpc/connectors/base_spec.rb +50 -0
- data/spec/lib/protobuf/rpc/connectors/common_spec.rb +128 -0
- data/spec/lib/protobuf/rpc/connectors/socket_spec.rb +36 -0
- data/spec/lib/protobuf/rpc/connectors/zmq_spec.rb +22 -0
- data/spec/lib/protobuf/rpc/servers/evented_server_spec.rb +18 -0
- data/spec/lib/protobuf/rpc/servers/socket_server_spec.rb +43 -0
- data/spec/lib/protobuf/rpc/servers/zmq/broker_spec.rb +35 -0
- data/spec/lib/protobuf/rpc/servers/zmq/server_spec.rb +41 -0
- data/spec/lib/protobuf/rpc/servers/zmq/util_spec.rb +45 -0
- data/spec/lib/protobuf/rpc/servers/zmq/worker_spec.rb +44 -0
- data/spec/lib/protobuf/rpc/service_dispatcher_spec.rb +116 -0
- data/spec/lib/protobuf/rpc/service_filters_spec.rb +451 -0
- data/spec/lib/protobuf/rpc/service_spec.rb +165 -0
- data/spec/lib/protobuf_spec.rb +62 -0
- data/spec/spec_helper.rb +51 -0
- data/spec/support/all.rb +6 -0
- data/spec/support/server.rb +101 -0
- data/spec/support/test/enum.pb.rb +34 -0
- data/spec/support/test/enum.proto +12 -0
- data/spec/support/test/resource.pb.rb +58 -0
- data/spec/support/test/resource.proto +31 -0
- data/spec/support/test/resource_service.rb +14 -0
- data/spec/support/test_app_file.rb +2 -0
- data/spec/support/tolerance_matcher.rb +40 -0
- data/test/data/data.bin +3 -0
- data/test/data/data_source.py +14 -0
- data/test/data/types.bin +0 -0
- data/test/data/types_source.py +22 -0
- data/test/data/unk.png +0 -0
- data/test/proto/addressbook.pb.rb +66 -0
- data/test/proto/addressbook.proto +33 -0
- data/test/proto/addressbook_base.pb.rb +58 -0
- data/test/proto/addressbook_base.proto +26 -0
- data/test/proto/addressbook_ext.pb.rb +20 -0
- data/test/proto/addressbook_ext.proto +6 -0
- data/test/proto/collision.pb.rb +17 -0
- data/test/proto/collision.proto +5 -0
- data/test/proto/ext_collision.pb.rb +24 -0
- data/test/proto/ext_collision.proto +8 -0
- data/test/proto/ext_range.pb.rb +22 -0
- data/test/proto/ext_range.proto +7 -0
- data/test/proto/float_default.proto +10 -0
- data/test/proto/lowercase.pb.rb +30 -0
- data/test/proto/lowercase.proto +9 -0
- data/test/proto/merge.pb.rb +39 -0
- data/test/proto/merge.proto +15 -0
- data/test/proto/nested.pb.rb +30 -0
- data/test/proto/nested.proto +9 -0
- data/test/proto/optional_field.pb.rb +35 -0
- data/test/proto/optional_field.proto +12 -0
- data/test/proto/packed.pb.rb +22 -0
- data/test/proto/packed.proto +6 -0
- data/test/proto/rpc.proto +6 -0
- data/test/proto/types.pb.rb +84 -0
- data/test/proto/types.proto +37 -0
- data/test/test_addressbook.rb +56 -0
- data/test/test_enum_value.rb +41 -0
- data/test/test_extension.rb +36 -0
- data/test/test_lowercase.rb +11 -0
- data/test/test_message.rb +128 -0
- data/test/test_optional_field.rb +103 -0
- data/test/test_packed_field.rb +40 -0
- data/test/test_parse.rb +15 -0
- data/test/test_repeated_types.rb +132 -0
- data/test/test_serialize.rb +61 -0
- data/test/test_standard_message.rb +96 -0
- data/test/test_types.rb +226 -0
- metadata +461 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
require 'date'
|
|
2
|
+
require 'protobuf/logger'
|
|
3
|
+
|
|
4
|
+
module Protobuf
|
|
5
|
+
module Rpc
|
|
6
|
+
class Stat
|
|
7
|
+
attr_accessor :mode, :start_time, :end_time, :request_size, :dispatcher
|
|
8
|
+
attr_accessor :response_size, :client, :server, :service, :method_name
|
|
9
|
+
|
|
10
|
+
MODES = [:SERVER, :CLIENT].freeze
|
|
11
|
+
|
|
12
|
+
def initialize(mode = :SERVER)
|
|
13
|
+
@mode = mode
|
|
14
|
+
start
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def client=(peer)
|
|
18
|
+
@client = {:port => peer[0], :ip => peer[1]}
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def client
|
|
22
|
+
@client ? "#{@client[:ip]}:#{@client[:port]}" : nil
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def method_name
|
|
26
|
+
@method_name ||= @dispatcher.try(:service).try(:rpc)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def server=(peer)
|
|
30
|
+
@server = {:port => peer[0], :ip => peer[1]}
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def server
|
|
34
|
+
@server ? "#{@server[:ip]}:#{@server[:port]}" : nil
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def service
|
|
38
|
+
@service ||= @dispatcher.try(:service).class.name
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def sizes
|
|
42
|
+
"#{@request_size || 0}B/#{@response_size || 0}B"
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def start
|
|
46
|
+
@start_time ||= Time.now
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def stop
|
|
50
|
+
start if !@start_time
|
|
51
|
+
@end_time ||= Time.now
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def rpc
|
|
55
|
+
service && method_name ? "#{service}##{method_name}" : nil
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def elapsed_time
|
|
59
|
+
(start_time && end_time ? "#{(end_time - start_time).round(4)}s" : nil)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def server?
|
|
63
|
+
@mode == :SERVER
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def client?
|
|
67
|
+
@mode == :CLIENT
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def to_s
|
|
71
|
+
[
|
|
72
|
+
server? ? "[SRV]" : "[CLT]",
|
|
73
|
+
rpc,
|
|
74
|
+
elapsed_time,
|
|
75
|
+
sizes,
|
|
76
|
+
server? ? server : client
|
|
77
|
+
].compact.join(' - ')
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
##
|
|
2
|
+
## Socket Mode
|
|
3
|
+
##
|
|
4
|
+
#
|
|
5
|
+
# Require this file if you wish to run your server and/or client RPC
|
|
6
|
+
# with the raw socket handlers. This is the default run mode for bin/rpc_server.
|
|
7
|
+
#
|
|
8
|
+
# To run with rpc_server either omit any mode switches, or explicitly pass `socket`:
|
|
9
|
+
#
|
|
10
|
+
# rpc_server myapp.rb
|
|
11
|
+
# rpc_server --socket myapp.rb
|
|
12
|
+
#
|
|
13
|
+
# To run for client-side only override the require in your Gemfile:
|
|
14
|
+
#
|
|
15
|
+
# gem 'protobuf', :require => 'protobuf/socket'
|
|
16
|
+
#
|
|
17
|
+
require 'protobuf'
|
|
18
|
+
::Protobuf.connector_type = :socket
|
|
19
|
+
|
|
20
|
+
require 'protobuf/rpc/servers/socket/server'
|
|
21
|
+
require 'protobuf/rpc/connectors/socket'
|
|
22
|
+
|
data/lib/protobuf/zmq.rb
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
##
|
|
2
|
+
## ZMQ Mode
|
|
3
|
+
##
|
|
4
|
+
#
|
|
5
|
+
# Require this file if you wish to run your server and/or client RPC
|
|
6
|
+
# with the ZeroMQ handlers.
|
|
7
|
+
#
|
|
8
|
+
# To run with rpc_server specify the switch `zmq`:
|
|
9
|
+
#
|
|
10
|
+
# rpc_server --zmq myapp.rb
|
|
11
|
+
#
|
|
12
|
+
# To run for client-side only override the require in your Gemfile:
|
|
13
|
+
#
|
|
14
|
+
# gem 'protobuf', :require => 'protobuf/zmq'
|
|
15
|
+
#
|
|
16
|
+
require 'protobuf'
|
|
17
|
+
Protobuf.connector_type = :zmq
|
|
18
|
+
|
|
19
|
+
require 'ffi-rzmq'
|
|
20
|
+
require 'protobuf/rpc/servers/zmq/server'
|
|
21
|
+
require 'protobuf/rpc/connectors/zmq'
|
data/lib/protobuf.rb
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
require 'logger'
|
|
2
|
+
require 'socket'
|
|
3
|
+
require 'pp'
|
|
4
|
+
require 'stringio'
|
|
5
|
+
require 'active_support/all'
|
|
6
|
+
|
|
7
|
+
module Protobuf
|
|
8
|
+
|
|
9
|
+
# See Protobuf#connector_type documentation.
|
|
10
|
+
CONNECTORS = [ :socket, :zmq, :evented ].freeze
|
|
11
|
+
|
|
12
|
+
# Default is Socket as it has no external dependencies.
|
|
13
|
+
DEFAULT_CONNECTOR = :socket
|
|
14
|
+
|
|
15
|
+
module_function
|
|
16
|
+
|
|
17
|
+
# Connector Type
|
|
18
|
+
#
|
|
19
|
+
# Default: socket
|
|
20
|
+
#
|
|
21
|
+
# Symbol value which denotes the type of connector to use
|
|
22
|
+
# during client requests to an RPC server.
|
|
23
|
+
def self.connector_type
|
|
24
|
+
@_connector_type ||= DEFAULT_CONNECTOR
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def self.connector_type=(type)
|
|
28
|
+
raise ArgumentError, 'Invalid connector type given' unless CONNECTORS.include?(type)
|
|
29
|
+
@_connector_type = type
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# GC Pause during server requests
|
|
33
|
+
#
|
|
34
|
+
# Default: false
|
|
35
|
+
#
|
|
36
|
+
# Boolean value to tell the server to disable
|
|
37
|
+
# the Garbage Collector when handling an rpc request.
|
|
38
|
+
# Once the request is completed, the GC is enabled again.
|
|
39
|
+
# This optomization provides a huge boost in speed to rpc requests.
|
|
40
|
+
def self.gc_pause_server_request?
|
|
41
|
+
return @_gc_pause_server_request unless @_gc_pause_server_request.nil?
|
|
42
|
+
gc_pause_server_request = false
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def self.gc_pause_server_request=(value)
|
|
46
|
+
@_gc_pause_server_request = !!value
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Print Deprecation Warnings
|
|
50
|
+
#
|
|
51
|
+
# Default: true
|
|
52
|
+
#
|
|
53
|
+
# Simple boolean to define whether we want field deprecation warnings to
|
|
54
|
+
# be printed to stderr or not. The rpc_server has an option to set this value
|
|
55
|
+
# explicitly, or you can turn this option off by setting
|
|
56
|
+
# ENV['PB_IGNORE_DEPRECATIONS'] to a non-empty value.
|
|
57
|
+
#
|
|
58
|
+
# The rpc_server option will override the ENV setting.
|
|
59
|
+
def self.print_deprecation_warnings?
|
|
60
|
+
return @_print_deprecation_warnings unless @_print_deprecation_warnings.nil?
|
|
61
|
+
print_deprecation_warnings = ENV.key?('PB_IGNORE_DEPRECATIONS') ? false : true
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def self.print_deprecation_warnings=(value)
|
|
65
|
+
@_print_deprecation_warnings = !!value
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
require 'protobuf/rpc/client'
|
|
71
|
+
require 'protobuf/rpc/service'
|
|
72
|
+
|
|
73
|
+
env_connector_type = ENV.fetch('PB_CLIENT_TYPE') {
|
|
74
|
+
::Protobuf::DEFAULT_CONNECTOR
|
|
75
|
+
}.to_s.downcase.strip.to_sym
|
|
76
|
+
|
|
77
|
+
if ::Protobuf::CONNECTORS.include?(env_connector_type)
|
|
78
|
+
require "protobuf/#{env_connector_type}"
|
|
79
|
+
else
|
|
80
|
+
$stderr.puts <<-WARN
|
|
81
|
+
[WARNING] Require attempted on an invalid connector type '#{env_connector_type}'.
|
|
82
|
+
Falling back to default '#{::Protobuf::DEFAULT_CONNECTOR}' connector.
|
|
83
|
+
WARN
|
|
84
|
+
|
|
85
|
+
require "protobuf/#{::Protobuf::DEFAULT_CONNECTOR}"
|
|
86
|
+
end
|
data/proto/rpc.pb.rb
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
##
|
|
2
|
+
# This file is auto-generated. DO NOT EDIT!
|
|
3
|
+
#
|
|
4
|
+
require 'protobuf/message'
|
|
5
|
+
|
|
6
|
+
module Protobuf
|
|
7
|
+
module Socketrpc
|
|
8
|
+
##
|
|
9
|
+
# Enum Classes
|
|
10
|
+
#
|
|
11
|
+
class ErrorReason < ::Protobuf::Enum; end
|
|
12
|
+
|
|
13
|
+
##
|
|
14
|
+
# Message Classes
|
|
15
|
+
#
|
|
16
|
+
class Request < ::Protobuf::Message; end
|
|
17
|
+
class Response < ::Protobuf::Message; end
|
|
18
|
+
|
|
19
|
+
##
|
|
20
|
+
# Enum Values
|
|
21
|
+
#
|
|
22
|
+
::Protobuf::Socketrpc::ErrorReason.define :BAD_REQUEST_DATA, 0
|
|
23
|
+
::Protobuf::Socketrpc::ErrorReason.define :BAD_REQUEST_PROTO, 1
|
|
24
|
+
::Protobuf::Socketrpc::ErrorReason.define :SERVICE_NOT_FOUND, 2
|
|
25
|
+
::Protobuf::Socketrpc::ErrorReason.define :METHOD_NOT_FOUND, 3
|
|
26
|
+
::Protobuf::Socketrpc::ErrorReason.define :RPC_ERROR, 4
|
|
27
|
+
::Protobuf::Socketrpc::ErrorReason.define :RPC_FAILED, 5
|
|
28
|
+
::Protobuf::Socketrpc::ErrorReason.define :INVALID_REQUEST_PROTO, 6
|
|
29
|
+
::Protobuf::Socketrpc::ErrorReason.define :BAD_RESPONSE_PROTO, 7
|
|
30
|
+
::Protobuf::Socketrpc::ErrorReason.define :UNKNOWN_HOST, 8
|
|
31
|
+
::Protobuf::Socketrpc::ErrorReason.define :IO_ERROR, 9
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
##
|
|
35
|
+
# Message Fields
|
|
36
|
+
#
|
|
37
|
+
::Protobuf::Socketrpc::Request.required(::Protobuf::Field::StringField, :service_name, 1)
|
|
38
|
+
::Protobuf::Socketrpc::Request.required(::Protobuf::Field::StringField, :method_name, 2)
|
|
39
|
+
::Protobuf::Socketrpc::Request.required(::Protobuf::Field::BytesField, :request_proto, 3)
|
|
40
|
+
|
|
41
|
+
::Protobuf::Socketrpc::Response.optional(::Protobuf::Field::BytesField, :response_proto, 1)
|
|
42
|
+
::Protobuf::Socketrpc::Response.optional(::Protobuf::Field::StringField, :error, 2)
|
|
43
|
+
::Protobuf::Socketrpc::Response.optional(::Protobuf::Field::BoolField, :callback, 3, :default => false)
|
|
44
|
+
::Protobuf::Socketrpc::Response.optional(::Protobuf::Socketrpc::ErrorReason, :error_reason, 4)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
end
|
|
48
|
+
end
|
data/proto/rpc.proto
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// Copyright (c) 2009 Shardul Deo
|
|
2
|
+
//
|
|
3
|
+
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
4
|
+
// of this software and associated documentation files (the "Software"), to deal
|
|
5
|
+
// in the Software without restriction, including without limitation the rights
|
|
6
|
+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
7
|
+
// copies of the Software, and to permit persons to whom the Software is
|
|
8
|
+
// furnished to do so, subject to the following conditions:
|
|
9
|
+
//
|
|
10
|
+
// The above copyright notice and this permission notice shall be included in
|
|
11
|
+
// all copies or substantial portions of the Software.
|
|
12
|
+
//
|
|
13
|
+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
15
|
+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
16
|
+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
|
+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
18
|
+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
19
|
+
// THE SOFTWARE.
|
|
20
|
+
|
|
21
|
+
// Author: Shardul Deo
|
|
22
|
+
//
|
|
23
|
+
// Protobufs needed for socket rpcs.
|
|
24
|
+
|
|
25
|
+
package protobuf.socketrpc;
|
|
26
|
+
|
|
27
|
+
message Request {
|
|
28
|
+
|
|
29
|
+
// RPC service full name
|
|
30
|
+
required string service_name = 1;
|
|
31
|
+
|
|
32
|
+
// RPC method name
|
|
33
|
+
required string method_name = 2;
|
|
34
|
+
|
|
35
|
+
// RPC request proto
|
|
36
|
+
required bytes request_proto = 3;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
message Response {
|
|
40
|
+
|
|
41
|
+
// RPC response proto
|
|
42
|
+
optional bytes response_proto = 1;
|
|
43
|
+
|
|
44
|
+
// Error, if any
|
|
45
|
+
optional string error = 2;
|
|
46
|
+
|
|
47
|
+
// Was callback invoked
|
|
48
|
+
optional bool callback = 3 [default = false];
|
|
49
|
+
|
|
50
|
+
// Error Reason
|
|
51
|
+
optional ErrorReason error_reason = 4;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Possible error reasons
|
|
55
|
+
// The server-side errors are returned in the response from the server.
|
|
56
|
+
// The client-side errors are returned by the client-side code when it doesn't
|
|
57
|
+
// have a response from the server.
|
|
58
|
+
enum ErrorReason {
|
|
59
|
+
|
|
60
|
+
// Server-side errors
|
|
61
|
+
BAD_REQUEST_DATA = 0; // Server received bad request data
|
|
62
|
+
BAD_REQUEST_PROTO = 1; // Server received bad request proto
|
|
63
|
+
SERVICE_NOT_FOUND = 2; // Service not found on server
|
|
64
|
+
METHOD_NOT_FOUND = 3; // Method not found on server
|
|
65
|
+
RPC_ERROR = 4; // Rpc threw exception on server
|
|
66
|
+
RPC_FAILED = 5; // Rpc failed on server
|
|
67
|
+
|
|
68
|
+
// Client-side errors (these are returned by the client-side code)
|
|
69
|
+
INVALID_REQUEST_PROTO = 6; // Rpc was called with invalid request proto
|
|
70
|
+
BAD_RESPONSE_PROTO = 7; // Server returned a bad response proto
|
|
71
|
+
UNKNOWN_HOST = 8; // Could not find supplied host
|
|
72
|
+
IO_ERROR = 9; // I/O error while communicating with server
|
|
73
|
+
}
|
data/protobuf.gemspec
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
$:.push File.expand_path("./lib", File.dirname(__FILE__))
|
|
3
|
+
require "protobuf/version"
|
|
4
|
+
|
|
5
|
+
Gem::Specification.new do |s|
|
|
6
|
+
s.name = 'protobuf'
|
|
7
|
+
s.version = Protobuf::VERSION
|
|
8
|
+
s.date = Time.now.strftime('%Y-%m-%d')
|
|
9
|
+
|
|
10
|
+
s.authors = ['BJ Neilsen', 'Brandon Dewitt']
|
|
11
|
+
s.email = ["bj.neilsen+protobuf@gmail.com", "brandonsdewitt+protobuf@gmail.com"]
|
|
12
|
+
s.homepage = "https://github.com/localshred/protobuf"
|
|
13
|
+
s.summary = "Google Protocol Buffers v#{Protobuf::PROTOC_VERSION} Serialization and RPC implementation for Ruby."
|
|
14
|
+
s.description = s.summary
|
|
15
|
+
|
|
16
|
+
s.files = `git ls-files`.split("\n")
|
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
|
19
|
+
s.require_paths = ["lib"]
|
|
20
|
+
|
|
21
|
+
unless ENV['WITHOUT_PROTO_COMPILER']
|
|
22
|
+
if defined?(JRUBY_VERSION)
|
|
23
|
+
s.platform = 'java'
|
|
24
|
+
else
|
|
25
|
+
s.extensions << File.join('ext', 'ruby_generator', 'extconf.rb')
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
s.add_dependency 'activesupport'
|
|
30
|
+
s.add_dependency 'ffi'
|
|
31
|
+
s.add_dependency 'multi_json'
|
|
32
|
+
s.add_dependency 'thor'
|
|
33
|
+
|
|
34
|
+
s.add_development_dependency 'eventmachine'
|
|
35
|
+
s.add_development_dependency 'ffi-rzmq'
|
|
36
|
+
# s.add_development_dependency 'perftools.rb'
|
|
37
|
+
s.add_development_dependency 'pry'
|
|
38
|
+
s.add_development_dependency 'pry-nav'
|
|
39
|
+
s.add_development_dependency 'rake'
|
|
40
|
+
s.add_development_dependency 'rake-compiler'
|
|
41
|
+
s.add_development_dependency 'rspec'
|
|
42
|
+
s.add_development_dependency 'simplecov'
|
|
43
|
+
s.add_development_dependency 'yard'
|
|
44
|
+
end
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
require 'benchmark'
|
|
2
|
+
require 'support/all'
|
|
3
|
+
require 'support/test/resource_service'
|
|
4
|
+
|
|
5
|
+
begin
|
|
6
|
+
require 'perftools'
|
|
7
|
+
rescue LoadError
|
|
8
|
+
$stderr.puts 'perftools must be uncommented in the gemspec before you can run this benchmark task'
|
|
9
|
+
exit(1)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Including a way to turn on debug logger for spec runs
|
|
13
|
+
if ENV["DEBUG"]
|
|
14
|
+
puts 'debugging'
|
|
15
|
+
debug_log = File.expand_path('../debug_bench.log', File.dirname(__FILE__) )
|
|
16
|
+
Protobuf::Logger.configure(:file => debug_log, :level => ::Logger::DEBUG)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
namespace :benchmark do
|
|
20
|
+
|
|
21
|
+
def benchmark_wrapper(global_bench = nil)
|
|
22
|
+
if global_bench
|
|
23
|
+
yield global_bench
|
|
24
|
+
else
|
|
25
|
+
Benchmark.bm(10) do |bench|
|
|
26
|
+
yield bench
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def em_client_em_server(number_tests, test_length, global_bench = nil)
|
|
32
|
+
EM.stop if EM.reactor_running?
|
|
33
|
+
|
|
34
|
+
EventMachine.fiber_run do
|
|
35
|
+
StubServer.new do |server|
|
|
36
|
+
client = ::Test::ResourceService.client
|
|
37
|
+
|
|
38
|
+
benchmark_wrapper(global_bench) do |bench|
|
|
39
|
+
bench.report("ES / EC") do
|
|
40
|
+
(1..number_tests.to_i).each { client.find(:name => "Test Name" * test_length.to_i, :active => true) }
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
EM.stop
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def em_client_sock_server(number_tests, test_length, global_bench = nil)
|
|
50
|
+
EM.stop if EM.reactor_running?
|
|
51
|
+
|
|
52
|
+
EventMachine.fiber_run do
|
|
53
|
+
StubServer.new(:server => Protobuf::Rpc::Socket::Server, :port => 9399) do |server|
|
|
54
|
+
client = ::Test::ResourceService.client(:port => 9399)
|
|
55
|
+
|
|
56
|
+
benchmark_wrapper(global_bench) do |bench|
|
|
57
|
+
bench.report("SS / EC") do
|
|
58
|
+
(1..number_tests.to_i).each { client.find(:name => "Test Name" * test_length.to_i, :active => true) }
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
EM.stop
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def sock_client_sock_server(number_tests, test_length, global_bench = nil)
|
|
68
|
+
load "protobuf/socket.rb"
|
|
69
|
+
EM.stop if EM.reactor_running?
|
|
70
|
+
|
|
71
|
+
StubServer.new(:server => Protobuf::Rpc::Socket::Server, :port => 9399) do |server|
|
|
72
|
+
client = ::Test::ResourceService.client(:port => 9399)
|
|
73
|
+
|
|
74
|
+
benchmark_wrapper(global_bench) do |bench|
|
|
75
|
+
bench.report("SS / SC") do
|
|
76
|
+
(1..number_tests.to_i).each { client.find(:name => "Test Name" * test_length.to_i, :active => true) }
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def sock_client_em_server(number_tests, test_length, global_bench = nil)
|
|
83
|
+
load "protobuf/socket.rb"
|
|
84
|
+
EM.stop if EM.reactor_running?
|
|
85
|
+
em_thread = Thread.new { EM.run }
|
|
86
|
+
Thread.pass until EM.reactor_running?
|
|
87
|
+
|
|
88
|
+
StubServer.new(:port => 9399) do |server|
|
|
89
|
+
client = ::Test::ResourceService.client(:port => 9399)
|
|
90
|
+
|
|
91
|
+
benchmark_wrapper(global_bench) do |bench|
|
|
92
|
+
bench.report("ES / SC") do
|
|
93
|
+
(1..number_tests.to_i).each { client.find(:name => "Test Name" * test_length.to_i, :active => true) }
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
EM.stop
|
|
99
|
+
Thread.kill(em_thread) if em_thread
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def zmq_client_zmq_server(number_tests, test_length, global_bench = nil)
|
|
103
|
+
load "protobuf/zmq.rb"
|
|
104
|
+
StubServer.new(:port => 9399, :server => Protobuf::Rpc::Zmq::Server) do |server|
|
|
105
|
+
client = ::Test::ResourceService.client(:port => 9399)
|
|
106
|
+
|
|
107
|
+
benchmark_wrapper(global_bench) do |bench|
|
|
108
|
+
bench.report("ZS / ZC") do
|
|
109
|
+
(1..number_tests.to_i).each { client.find(:name => "Test Name" * test_length.to_i, :active => true) }
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
server.stop
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
desc "benchmark ZMQ client with ZMQ server"
|
|
117
|
+
task :zmq_client_zmq_server, [:number, :length] do |t, args|
|
|
118
|
+
args.with_defaults(:number => 1000, :length => 100)
|
|
119
|
+
zmq_client_zmq_server(args[:number], args[:length])
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
desc "benchmark ZMQ client with ZMQ server and profile"
|
|
123
|
+
task :zmq_profile, [:number, :length, :profile_output] do |t, args|
|
|
124
|
+
args.with_defaults(:number => 1000, :length => 100, :profile_output => "/tmp/zmq_profiler_#{Time.now.to_i}")
|
|
125
|
+
::PerfTools::CpuProfiler.start(args[:profile_output]) do
|
|
126
|
+
zmq_client_zmq_server(args[:number], args[:length])
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
puts args[:profile_output]
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
desc "benchmark Protobuf Message #new"
|
|
133
|
+
task :profile_protobuf_new, [:number, :profile_output] do |t, args|
|
|
134
|
+
args.with_defaults(:number => 1000, :profile_output => "/tmp/profiler_new_#{Time.now.to_i}")
|
|
135
|
+
create_params = { :name => "The name that we set", :date_created => Time.now.to_i, :status => 2 }
|
|
136
|
+
::PerfTools::CpuProfiler.start(args[:profile_output]) do
|
|
137
|
+
args[:number].to_i.times { Test::Resource.new(create_params) }
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
puts args[:profile_output]
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
desc "benchmark EventMachine client with EventMachine server"
|
|
144
|
+
task :em_client_em_server, [:number, :length] do |t, args|
|
|
145
|
+
args.with_defaults(:number => 1000, :length => 100)
|
|
146
|
+
em_client_em_server(args[:number], args[:length])
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
desc "benchmark EventMachine client with Socket server"
|
|
150
|
+
task :em_client_sock_server, [:number, :length] do |t, args|
|
|
151
|
+
args.with_defaults(:number => 1000, :length => 100)
|
|
152
|
+
em_client_sock_server(args[:number], args[:length])
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
desc "benchmark Socket client with Socket server"
|
|
156
|
+
task :sock_client_sock_server, [:number, :length] do |t, args|
|
|
157
|
+
args.with_defaults(:number => 1000, :length => 100)
|
|
158
|
+
sock_client_sock_server(args[:number], args[:length])
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
desc "benchmark Socket client with EventMachine server"
|
|
162
|
+
task :sock_client_em_server, [:number, :length] do |t, args|
|
|
163
|
+
args.with_defaults(:number => 1000, :length => 100)
|
|
164
|
+
sock_client_em_server(args[:number], args[:length])
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
desc "benchmark server performance"
|
|
168
|
+
task :servers, [:number, :length] do |t, args|
|
|
169
|
+
args.with_defaults(:number => 1000, :length => 100)
|
|
170
|
+
|
|
171
|
+
Benchmark.bm(10) do |bench|
|
|
172
|
+
# zmq_client_zmq_server(args[:number], args[:length], bench)
|
|
173
|
+
# em_client_em_server(args[:number], args[:length], bench)
|
|
174
|
+
# em_client_sock_server(args[:number], args[:length], bench)
|
|
175
|
+
sock_client_sock_server(args[:number], args[:length], bench)
|
|
176
|
+
# sock_client_em_server(args[:number], args[:length], bench)
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'spec/support/test/resource_service'
|
|
3
|
+
|
|
4
|
+
describe 'Functional EventMachine Client' do
|
|
5
|
+
before(:each) do
|
|
6
|
+
load 'protobuf/evented.rb'
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it 'runs fine when required fields are set' do
|
|
10
|
+
expect {
|
|
11
|
+
EventMachine.fiber_run do
|
|
12
|
+
StubServer.new do |server|
|
|
13
|
+
client = ::Test::ResourceService.client(:timeout => 5)
|
|
14
|
+
|
|
15
|
+
client.find(:name => 'Test Name', :active => true) do |c|
|
|
16
|
+
c.on_success do |succ|
|
|
17
|
+
succ.name.should eq("Test Name")
|
|
18
|
+
succ.status.should eq(::Test::StatusType::ENABLED)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
c.on_failure do |err|
|
|
22
|
+
raise err.inspect
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
EM.stop
|
|
27
|
+
end
|
|
28
|
+
}.to_not raise_error
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'calls the on_failure callback when a message is malformed' do
|
|
32
|
+
error = nil
|
|
33
|
+
EventMachine.fiber_run do
|
|
34
|
+
StubServer.new do |server|
|
|
35
|
+
request = ::Test::ResourceFindRequest.new(:active => true)
|
|
36
|
+
client = ::Test::ResourceService.client
|
|
37
|
+
|
|
38
|
+
client.find(request) do |c|
|
|
39
|
+
c.on_success { raise "shouldn't pass"}
|
|
40
|
+
c.on_failure {|e| error = e}
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
EM.stop
|
|
44
|
+
end
|
|
45
|
+
error.message.should =~ /ResourceFindRequest.*fields.*improperly set/
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it 'calls the on_failure callback when the request type is wrong' do
|
|
49
|
+
error = nil
|
|
50
|
+
EventMachine.fiber_run do
|
|
51
|
+
StubServer.new do |server|
|
|
52
|
+
request = ::Test::Resource.new(:name => 'Test Name')
|
|
53
|
+
client = ::Test::ResourceService.client
|
|
54
|
+
|
|
55
|
+
client.find(request) do |c|
|
|
56
|
+
c.on_success { raise "shouldn't pass"}
|
|
57
|
+
c.on_failure {|e| error = e}
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
EM.stop
|
|
61
|
+
end
|
|
62
|
+
error.message.should =~ /expected request.*ResourceFindRequest.*Resource instead/i
|
|
63
|
+
end
|
|
64
|
+
end
|