ffi-rzmq 1.0.3 → 2.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +7 -0
  2. data/.travis.yml +5 -6
  3. data/AUTHORS.txt +7 -1
  4. data/History.txt +79 -0
  5. data/README.rdoc +67 -29
  6. data/Rakefile +15 -0
  7. data/examples/README.rdoc +1 -3
  8. data/examples/{v3api/latency_measurement.rb → latency_measurement.rb} +1 -2
  9. data/examples/{v3api/local_lat.rb → local_lat.rb} +1 -1
  10. data/examples/{v3api/local_lat_poll.rb → local_lat_poll.rb} +4 -4
  11. data/examples/{v3api/local_throughput.rb → local_throughput.rb} +1 -1
  12. data/examples/{v3api/pub.rb → pub.rb} +1 -1
  13. data/examples/{v2api/publish_subscribe.rb → publish_subscribe.rb} +2 -2
  14. data/examples/{v2api/remote_lat.rb → remote_lat.rb} +1 -1
  15. data/examples/{v3api/remote_throughput.rb → remote_throughput.rb} +4 -3
  16. data/examples/repreq_over_curve.rb +60 -0
  17. data/examples/{v2api/reqrep_poll.rb → reqrep_poll.rb} +3 -4
  18. data/examples/{v2api/request_response.rb → request_response.rb} +1 -2
  19. data/examples/{v3api/sub.rb → sub.rb} +1 -2
  20. data/examples/{v3api/throughput_measurement.rb → throughput_measurement.rb} +1 -1
  21. data/examples/{v3api/xreqxrep_poll.rb → xreqxrep_poll.rb} +6 -7
  22. data/ffi-rzmq.gemspec +4 -4
  23. data/lib/ffi-rzmq/context.rb +26 -54
  24. data/lib/ffi-rzmq/device.rb +8 -4
  25. data/lib/ffi-rzmq/exceptions.rb +3 -0
  26. data/lib/ffi-rzmq/message.rb +24 -30
  27. data/lib/ffi-rzmq/poll.rb +5 -16
  28. data/lib/ffi-rzmq/poll_item.rb +0 -1
  29. data/lib/ffi-rzmq/socket.rb +132 -282
  30. data/lib/ffi-rzmq/util.rb +28 -36
  31. data/lib/ffi-rzmq/version.rb +1 -1
  32. data/lib/ffi-rzmq.rb +3 -3
  33. data/lib/io_extensions.rb +1 -1
  34. data/spec/context_spec.rb +18 -23
  35. data/spec/device_spec.rb +13 -12
  36. data/spec/message_spec.rb +13 -13
  37. data/spec/multipart_spec.rb +11 -11
  38. data/spec/nonblocking_recv_spec.rb +22 -22
  39. data/spec/poll_spec.rb +49 -49
  40. data/spec/pushpull_spec.rb +12 -11
  41. data/spec/reqrep_spec.rb +11 -11
  42. data/spec/socket_spec.rb +110 -197
  43. data/spec/spec_helper.rb +3 -11
  44. data/spec/support/generate_keys_and_certs.rb +41 -0
  45. data/spec/support/test.crt +26 -13
  46. data/spec/support/test.key +49 -13
  47. data/spec/util_spec.rb +29 -0
  48. data/travis_build_script.sh +27 -0
  49. metadata +83 -104
  50. data/examples/v2api/latency_measurement.rb +0 -139
  51. data/examples/v2api/local_lat.rb +0 -58
  52. data/examples/v2api/local_lat_poll.rb +0 -66
  53. data/examples/v2api/local_throughput.rb +0 -58
  54. data/examples/v2api/pub.rb +0 -46
  55. data/examples/v2api/remote_throughput.rb +0 -39
  56. data/examples/v2api/sub.rb +0 -74
  57. data/examples/v2api/throughput_measurement.rb +0 -138
  58. data/examples/v2api/xreqxrep_poll.rb +0 -93
  59. data/examples/v3api/publish_subscribe.rb +0 -82
  60. data/examples/v3api/remote_lat.rb +0 -71
  61. data/examples/v3api/reqrep_poll.rb +0 -62
  62. data/examples/v3api/request_response.rb +0 -40
  63. data/lib/ffi-rzmq/constants.rb +0 -187
  64. data/lib/ffi-rzmq/libc.rb +0 -19
  65. data/lib/ffi-rzmq/libzmq.rb +0 -283
@@ -1,15 +1,28 @@
1
1
  -----BEGIN CERTIFICATE-----
2
- MIICRzCCAbCgAwIBAgIJAIhPfXaKAijbMA0GCSqGSIb3DQEBBQUAMCIxCzAJBgNV
3
- BAYTAlhZMRMwEQYDVQQIEwpOZXJ2ZXJsYW5kMB4XDTEyMDgyODE2NDIzMloXDTEz
4
- MDgyODE2NDIzMlowIjELMAkGA1UEBhMCWFkxEzARBgNVBAgTCk5lcnZlcmxhbmQw
5
- gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAPTe1/MFg4gGjB5Kx/XzP5HQys2k
6
- R+X7+h+cG7jz9p8mNiW/G54WQX7z4EzLrSFrNdXhe6NRXzqcVtyNl9NPh4QpPpOi
7
- ddOjNWworai6d7NShK4gFzL62qY5gSsZ4TYLxfSDEy6Zggy0fFFu8C7iHJVo/1kY
8
- A1OxikDkbfHX0rW3AgMBAAGjgYQwgYEwHQYDVR0OBBYEFEbSBVWuzrSmust9Sa6J
9
- sm7Tg40KMFIGA1UdIwRLMEmAFEbSBVWuzrSmust9Sa6Jsm7Tg40KoSakJDAiMQsw
10
- CQYDVQQGEwJYWTETMBEGA1UECBMKTmVydmVybGFuZIIJAIhPfXaKAijbMAwGA1Ud
11
- EwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAS0+17FjKmjCPHfJApTZgVXGD/LHC
12
- Bdzo+bl/hWpMyF27CUJxdZOMRpHqpE/Qv77jG/tfHnuArYPwDcB8AIErmvhNKCZx
13
- GLm19kTd4K1Y5JcAqkOHBma1e1V/g4ryWvUtpQkqD6tQxX0ctlBmXXK/Jsj/wG0W
14
- NNCQq2S19aNZcGo=
2
+ MIIE1DCCArygAwIBAgIBADANBgkqhkiG9w0BAQUFADAcMRowGAYDVQQDDBFub2Jv
3
+ ZHkvREM9ZXhhbXBsZTAeFw0xOTAxMDUxNjAxMThaFw0yOTAxMDIxNjAxMThaMBwx
4
+ GjAYBgNVBAMMEW5vYm9keS9EQz1leGFtcGxlMIICIjANBgkqhkiG9w0BAQEFAAOC
5
+ Ag8AMIICCgKCAgEA5oQhrlSbC9UjEihMsnoF4JFk38HVOkiVRRtLr+UWBYEXI5Xt
6
+ aKXoz1OFgZuVUQWuNrZ7HKaSGzZUSlp1AKx9svLzlCrDP4q/s31ZYE3fnAOvbEVH
7
+ +Xfns1gLYhSZEbYIzv5waW3hFLXQmZMSgvU6XB2cO7vZivTzjhvhPwkkIY5G23Ta
8
+ 20hemZKd7cKI+ricyTeg7eQ3QoNmCbSDvcAz/CiePX4qYwKfE6wBEcKRPB2F2LfW
9
+ U3V8oNdAY2otSXOKLvxXgqsMaUUo/+TZAdOAdCG1bhInV2z30KbtjYuoldN6Qpml
10
+ v+jmzlTkEIg2JO0VwkSrkI3F7UBz/sNFj1xYx8KY76KsfFQ7TyCMMuJJ8WC58Q9J
11
+ +tz/tx2uLxWU/hFjc7OPJ2lL4pNxAi3r6D5KYHQOplLGGB9x5F2ulkjo0Ea4CUR5
12
+ 2yh8mxHSTrETjLzV+Z6bjbqL178Kfelvpd0ZjuqvrUBXDdj6t+VglICw78bX+GQR
13
+ QpCzl4n65A1WZYJSQzccGKlipgfypEMalv3QLZxyJe1w8xtkuB+rBGb3m5c6xSok
14
+ K4q11szlBS7lN439oY5NEKULRUyMqt++0y/l7bWsGmJpl5I03HA044cYXGm4WwCE
15
+ Ldp+geNAF6DP1vIcrvCJSzJZX78NaxSHQ8WFvTt+W9WnMnmiQnAjBk8TP88CAwEA
16
+ AaMhMB8wHQYDVR0OBBYEFFY+V2zaAFjUn9dZHWzXOzmR6GoIMA0GCSqGSIb3DQEB
17
+ BQUAA4ICAQBO2snAHYhn0lwSpp6rql1VUJexndMhTdDMpYV+VAyqGsVsmq3iD2aC
18
+ O9CWtyGRfiK3AsxjCIQjP/n19YzYoxs6/eSCWnpMd4WlL+W2Nkgj/2fUdvV3qM7Y
19
+ dv+jd5ov1Dxoz/nUbhxXozMd7V7k0EdqpjObp8sED/eO3niuSfbGO6Ef2DwjqOWK
20
+ ukLMO7l67sAcHH1tW8fbvSPpVZ8NJdJx6Q5C+/lTDpDQP7OlRjXe5T7h4fl1OOEZ
21
+ hCpW+Hq3Jf/uqH9zbjynVncqgd6PkO2BCuD9P+aDBZ6no5+3jebTlx+OHndrgXgH
22
+ 9QN0ifiQGMcBYh4Iv0JQgSiW8dGzYuP8BsxJ3fOWGW9wZAelvI3lS9Yii6GVH44D
23
+ QdhQlYwpoiZq1A2kOzsKy86nejRpeQg965ddNLw1yNMJO9yL1FtmwEiF9VLvhdTd
24
+ gh92imoxNtOyBiGvqn537+ZrQmQPU8OM0zySI9+mhC6E7ASTVquGUC5bCHSjavVR
25
+ AaeQoXQp0NwqoO6Qw9QIAVRaW0cPw3lnIZLGk++XHuWkrgkqdQMcKit80oiGZ+Bq
26
+ usfXTVeXMoYjw2MJ+RRxkePD4FXCulErG10Dqga36zMTrq1UqbVDVMjkO2OAbypW
27
+ Z5PCmTr1vgYgzSHr/bx833wWP/8KyClU78YF4nZSmAgywXfSjo2rpA==
15
28
  -----END CERTIFICATE-----
@@ -1,15 +1,51 @@
1
1
  -----BEGIN RSA PRIVATE KEY-----
2
- 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
- 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
- +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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
15
51
  -----END RSA PRIVATE KEY-----
data/spec/util_spec.rb ADDED
@@ -0,0 +1,29 @@
1
+ require File.join(File.dirname(__FILE__), %w[spec_helper])
2
+
3
+ module ZMQ
4
+ describe Util do
5
+
6
+ if LibZMQ.version4?
7
+ describe "curve_keypair" do
8
+
9
+ it "returns a set of public and private keys (libsodium linked)" do
10
+ expect(ZMQ::Util).to receive(:curve_keypair).and_return([0, 1])
11
+ public_key, private_key = ZMQ::Util.curve_keypair
12
+
13
+ expect(public_key).not_to eq private_key
14
+ expect(public_key).not_to be_nil
15
+ expect(private_key).not_to be_nil
16
+ end
17
+
18
+ it "raises if zmq does not support CURVE (libsodium not linked)" do
19
+ expect do
20
+ allow(LibZMQ).to receive(:zmq_curve_keypair).and_return(-1)
21
+ ZMQ::Util.curve_keypair
22
+ end.to raise_exception(ZMQ::NotSupportedError)
23
+ end
24
+
25
+ end
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,27 @@
1
+ #/bin/bash
2
+ set -ev
3
+
4
+ bundle install
5
+
6
+ sudo apt-get -qq update
7
+ sudo apt-get install libtool pkg-config build-essential autoconf automake wget
8
+
9
+ git clone https://github.com/jedisct1/libsodium --branch stable
10
+ cd libsodium
11
+ ./autogen.sh
12
+ ./configure && make check
13
+ sudo make install
14
+ cd ..
15
+
16
+ VERSION="4.2.2"
17
+ BASE="zeromq-${VERSION}"
18
+ TARBALL="${BASE}.tar.gz"
19
+ wget https://github.com/zeromq/libzmq/releases/download/v$VERSION/$TARBALL
20
+ tar -xvf $TARBALL
21
+ cd $BASE
22
+ ./autogen.sh
23
+ ./configure && make check
24
+ sudo make install
25
+ sudo ldconfig
26
+
27
+ bundle exec rake spec
metadata CHANGED
@@ -1,117 +1,96 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: ffi-rzmq
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 1
7
- - 0
8
- - 3
9
- version: 1.0.3
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.7
10
5
  platform: ruby
11
- authors:
6
+ authors:
12
7
  - Chuck Remes
13
8
  autorequire:
14
9
  bindir: bin
15
10
  cert_chain: []
16
-
17
- date: 2013-10-03 00:00:00 -05:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- name: ffi
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- requirements:
11
+ date: 2019-01-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ffi-rzmq-core
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
25
17
  - - ">="
26
- - !ruby/object:Gem::Version
27
- segments:
28
- - 0
29
- version: "0"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.0.7
30
20
  type: :runtime
31
- version_requirements: *id001
32
- - !ruby/object:Gem::Dependency
33
- name: rspec
34
21
  prerelease: false
35
- requirement: &id002 !ruby/object:Gem::Requirement
36
- requirements:
37
- - - ~>
38
- - !ruby/object:Gem::Version
39
- segments:
40
- - 2
41
- - 6
42
- version: "2.6"
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 1.0.7
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.7'
43
34
  type: :development
44
- version_requirements: *id002
45
- - !ruby/object:Gem::Dependency
46
- name: rake
47
35
  prerelease: false
48
- requirement: &id003 !ruby/object:Gem::Requirement
49
- requirements:
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.7'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
50
45
  - - ">="
51
- - !ruby/object:Gem::Version
52
- segments:
53
- - 0
54
- version: "0"
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
55
48
  type: :development
56
- version_requirements: *id003
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
57
55
  description: |-
58
56
  This gem wraps the ZeroMQ networking library using the ruby FFI (foreign
59
57
  function interface). It's a pure ruby wrapper so this gem can be loaded
60
- and run by any ruby runtime that supports FFI. That's all of the major ones -
61
- MRI, Rubinius and JRuby.
62
- email:
58
+ and run by any ruby runtime that supports FFI. That's all of the major ones - MRI, Rubinius and JRuby.
59
+ email:
63
60
  - git@chuckremes.com
64
61
  executables: []
65
-
66
62
  extensions: []
67
-
68
63
  extra_rdoc_files: []
69
-
70
- files:
71
- - .bnsignore
72
- - .gitignore
73
- - .travis.yml
64
+ files:
65
+ - ".bnsignore"
66
+ - ".gitignore"
67
+ - ".travis.yml"
74
68
  - AUTHORS.txt
75
69
  - Gemfile
76
70
  - History.txt
77
71
  - README.rdoc
78
72
  - Rakefile
79
73
  - examples/README.rdoc
80
- - examples/v2api/latency_measurement.rb
81
- - examples/v2api/local_lat.rb
82
- - examples/v2api/local_lat_poll.rb
83
- - examples/v2api/local_throughput.rb
84
- - examples/v2api/pub.rb
85
- - examples/v2api/publish_subscribe.rb
86
- - examples/v2api/remote_lat.rb
87
- - examples/v2api/remote_throughput.rb
88
- - examples/v2api/reqrep_poll.rb
89
- - examples/v2api/request_response.rb
90
- - examples/v2api/sub.rb
91
- - examples/v2api/throughput_measurement.rb
92
- - examples/v2api/xreqxrep_poll.rb
93
- - examples/v3api/latency_measurement.rb
94
- - examples/v3api/local_lat.rb
95
- - examples/v3api/local_lat_poll.rb
96
- - examples/v3api/local_throughput.rb
97
- - examples/v3api/pub.rb
98
- - examples/v3api/publish_subscribe.rb
99
- - examples/v3api/remote_lat.rb
100
- - examples/v3api/remote_throughput.rb
101
- - examples/v3api/reqrep_poll.rb
102
- - examples/v3api/request_response.rb
103
- - examples/v3api/sub.rb
104
- - examples/v3api/throughput_measurement.rb
105
- - examples/v3api/xreqxrep_poll.rb
74
+ - examples/latency_measurement.rb
75
+ - examples/local_lat.rb
76
+ - examples/local_lat_poll.rb
77
+ - examples/local_throughput.rb
78
+ - examples/pub.rb
79
+ - examples/publish_subscribe.rb
80
+ - examples/remote_lat.rb
81
+ - examples/remote_throughput.rb
82
+ - examples/repreq_over_curve.rb
83
+ - examples/reqrep_poll.rb
84
+ - examples/request_response.rb
85
+ - examples/sub.rb
86
+ - examples/throughput_measurement.rb
87
+ - examples/xreqxrep_poll.rb
106
88
  - ext/README
107
89
  - ffi-rzmq.gemspec
108
90
  - lib/ffi-rzmq.rb
109
- - lib/ffi-rzmq/constants.rb
110
91
  - lib/ffi-rzmq/context.rb
111
92
  - lib/ffi-rzmq/device.rb
112
93
  - lib/ffi-rzmq/exceptions.rb
113
- - lib/ffi-rzmq/libc.rb
114
- - lib/ffi-rzmq/libzmq.rb
115
94
  - lib/ffi-rzmq/message.rb
116
95
  - lib/ffi-rzmq/poll.rb
117
96
  - lib/ffi-rzmq/poll_item.rb
@@ -130,39 +109,37 @@ files:
130
109
  - spec/reqrep_spec.rb
131
110
  - spec/socket_spec.rb
132
111
  - spec/spec_helper.rb
112
+ - spec/support/generate_keys_and_certs.rb
133
113
  - spec/support/test.crt
134
114
  - spec/support/test.key
135
- has_rdoc: true
115
+ - spec/util_spec.rb
116
+ - travis_build_script.sh
136
117
  homepage: http://github.com/chuckremes/ffi-rzmq
137
- licenses: []
138
-
118
+ licenses:
119
+ - MIT
120
+ metadata: {}
139
121
  post_install_message:
140
122
  rdoc_options: []
141
-
142
- require_paths:
123
+ require_paths:
143
124
  - lib
144
- required_ruby_version: !ruby/object:Gem::Requirement
145
- requirements:
125
+ required_ruby_version: !ruby/object:Gem::Requirement
126
+ requirements:
146
127
  - - ">="
147
- - !ruby/object:Gem::Version
148
- segments:
149
- - 0
150
- version: "0"
151
- required_rubygems_version: !ruby/object:Gem::Requirement
152
- requirements:
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ required_rubygems_version: !ruby/object:Gem::Requirement
131
+ requirements:
153
132
  - - ">="
154
- - !ruby/object:Gem::Version
155
- segments:
156
- - 0
157
- version: "0"
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
158
135
  requirements: []
159
-
160
136
  rubyforge_project: ffi-rzmq
161
- rubygems_version: 1.3.6
137
+ rubygems_version: 2.7.3
162
138
  signing_key:
163
- specification_version: 3
164
- summary: This gem wraps the ZeroMQ (0mq) networking library using Ruby FFI (foreign function interface).
165
- test_files:
139
+ specification_version: 4
140
+ summary: This gem wraps the ZeroMQ (0mq) networking library using Ruby FFI (foreign
141
+ function interface).
142
+ test_files:
166
143
  - spec/context_spec.rb
167
144
  - spec/device_spec.rb
168
145
  - spec/message_spec.rb
@@ -173,5 +150,7 @@ test_files:
173
150
  - spec/reqrep_spec.rb
174
151
  - spec/socket_spec.rb
175
152
  - spec/spec_helper.rb
153
+ - spec/support/generate_keys_and_certs.rb
176
154
  - spec/support/test.crt
177
155
  - spec/support/test.key
156
+ - spec/util_spec.rb
@@ -1,139 +0,0 @@
1
-
2
- require File.join(File.dirname(__FILE__), '..', '..', 'lib', 'ffi-rzmq')
3
-
4
-
5
- # Within a single process, we start up two threads. One thread has a REQ (request)
6
- # socket and the second thread has a REP (reply) socket. We measure the
7
- # *round-trip* latency between these sockets. Only *one* message is in flight at
8
- # any given moment.
9
- #
10
- # This example also illustrates how a single context can be shared amongst several
11
- # threads. Sharing a single context also allows a user to specify the "inproc"
12
- # transport in addition to "tcp" and "ipc".
13
- #
14
- # % ruby latency_measurement.rb tcp://127.0.0.1:5555 1024 1_000_000
15
- #
16
- # % ruby latency_measurement.rb inproc://lm_sock 1024 1_000_000
17
- #
18
-
19
- if ARGV.length < 3
20
- puts "usage: ruby latency_measurement.rb <connect-to> <message-size> <roundtrip-count>"
21
- exit
22
- end
23
-
24
- link = ARGV[0]
25
- message_size = ARGV[1].to_i
26
- roundtrip_count = ARGV[2].to_i
27
-
28
- def assert(rc)
29
- raise "Last API call failed at #{caller(1)}" unless rc >= 0
30
- end
31
-
32
- begin
33
- master_context = ZMQ::Context.new
34
- rescue ContextError => e
35
- STDERR.puts "Failed to allocate context or socket!"
36
- raise
37
- end
38
-
39
-
40
- class Receiver
41
- def initialize context, link, size, count
42
- @context = context
43
- @link = link
44
- @size = size
45
- @count = count
46
-
47
- begin
48
- @socket = @context.socket(ZMQ::REP)
49
- rescue ContextError => e
50
- STDERR.puts "Failed to allocate REP socket!"
51
- raise
52
- end
53
-
54
- assert(@socket.setsockopt(ZMQ::LINGER, 100))
55
-
56
- assert(@socket.setsockopt(ZMQ::HWM, 100))
57
-
58
- assert(@socket.bind(@link))
59
- end
60
-
61
- def run
62
- @count.times do
63
- string = ''
64
- assert(@socket.recv_string(string, 0))
65
-
66
- raise "Message size doesn't match, expected [#{@size}] but received [#{string.size}]" if @size != string.size
67
-
68
- assert(@socket.send_string(string, 0))
69
- end
70
-
71
- assert(@socket.close)
72
- end
73
- end
74
-
75
- class Transmitter
76
- def initialize context, link, size, count
77
- @context = context
78
- @link = link
79
- @size = size
80
- @count = count
81
-
82
- begin
83
- @socket = @context.socket(ZMQ::REQ)
84
- rescue ContextError => e
85
- STDERR.puts "Failed to allocate REP socket!"
86
- raise
87
- end
88
-
89
- assert(@socket.setsockopt(ZMQ::LINGER, 100))
90
-
91
- assert(@socket.setsockopt(ZMQ::HWM, 100))
92
-
93
- assert(@socket.connect(@link))
94
- end
95
-
96
- def run
97
- msg = "#{ '3' * @size }"
98
-
99
- elapsed = elapsed_microseconds do
100
- @count.times do
101
- assert(@socket.send_string(msg, 0))
102
- assert(@socket.recv_string(msg, 0))
103
-
104
- raise "Message size doesn't match, expected [#{@size}] but received [#{msg.size}]" if @size != msg.size
105
- end
106
- end
107
-
108
- latency = elapsed / @count / 2
109
-
110
- puts "message size: %i [B]" % @size
111
- puts "roundtrip count: %i" % @count
112
- puts "throughput (msgs/s): %i" % (@count / (elapsed / 1_000_000))
113
- puts "mean latency: %.3f [us]" % latency
114
- assert(@socket.close)
115
- end
116
-
117
- def elapsed_microseconds(&blk)
118
- start = Time.now
119
- yield
120
- value = ((Time.now - start) * 1_000_000)
121
- end
122
- end
123
-
124
- threads = []
125
- threads << Thread.new do
126
- receiver = Receiver.new(master_context, link, message_size, roundtrip_count)
127
- receiver.run
128
- end
129
-
130
- sleep 1
131
-
132
- threads << Thread.new do
133
- transmitter = Transmitter.new(master_context, link, message_size, roundtrip_count)
134
- transmitter.run
135
- end
136
-
137
- threads.each {|t| t.join}
138
-
139
- master_context.terminate
@@ -1,58 +0,0 @@
1
- #
2
- # Copyright (c) 2007-2010 iMatix Corporation
3
- #
4
- # This file is part of 0MQ.
5
- #
6
- # 0MQ is free software; you can redistribute it and/or modify it under
7
- # the terms of the Lesser GNU General Public License as published by
8
- # the Free Software Foundation; either version 3 of the License, or
9
- # (at your option) any later version.
10
- #
11
- # 0MQ is distributed in the hope that it will be useful,
12
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- # Lesser GNU General Public License for more details.
15
- #
16
- # You should have received a copy of the Lesser GNU General Public License
17
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
18
-
19
- require File.join(File.dirname(__FILE__), '..', '..', 'lib', 'ffi-rzmq')
20
-
21
- if ARGV.length < 3
22
- puts "usage: ruby local_lat.rb <connect-to> <message-size> <roundtrip-count>"
23
- exit
24
- end
25
-
26
- bind_to = ARGV[0]
27
- message_size = ARGV[1].to_i
28
- roundtrip_count = ARGV[2].to_i
29
-
30
- def assert(rc)
31
- raise "Last API call failed at #{caller(1)}" unless rc >= 0
32
- end
33
-
34
- begin
35
- ctx = ZMQ::Context.new
36
- s = ctx.socket(ZMQ::REP)
37
- rescue ContextError => e
38
- STDERR.puts "Failed to allocate context or socket!"
39
- raise
40
- end
41
-
42
- assert(s.setsockopt(ZMQ::LINGER, 100))
43
- assert(s.setsockopt(ZMQ::HWM, 100))
44
-
45
- assert(s.bind(bind_to))
46
-
47
- roundtrip_count.times do
48
- string = ''
49
- assert(s.recv_string(string, 0))
50
-
51
- raise "Message size doesn't match, expected [#{message_size}] but received [#{string.size}]" if message_size != string.size
52
-
53
- assert(s.send_string(string, 0))
54
- end
55
-
56
- assert(s.close)
57
-
58
- ctx.terminate
@@ -1,66 +0,0 @@
1
-
2
- require File.join(File.dirname(__FILE__), '..', '..', 'lib', 'ffi-rzmq')
3
-
4
- if ARGV.length < 3
5
- puts "usage: ruby local_lat.rb <connect-to> <message-size> <roundtrip-count>"
6
- exit
7
- end
8
-
9
- link = ARGV[0]
10
- message_size = ARGV[1].to_i
11
- roundtrip_count = ARGV[2].to_i
12
-
13
- def assert(rc)
14
- raise "Last API call failed at #{caller(1)}" unless rc >= 0
15
- end
16
-
17
- begin
18
- ctx = ZMQ::Context.new
19
- s1 = ctx.socket(ZMQ::REQ)
20
- s2 = ctx.socket(ZMQ::REP)
21
- rescue ContextError => e
22
- STDERR.puts "Failed to allocate context or socket!"
23
- raise
24
- end
25
-
26
- assert(s1.setsockopt(ZMQ::LINGER, 100))
27
- assert(s2.setsockopt(ZMQ::LINGER, 100))
28
-
29
- assert(s1.connect(link))
30
- assert(s2.bind(link))
31
-
32
- poller = ZMQ::Poller.new
33
- poller.register_readable(s2)
34
- poller.register_readable(s1)
35
-
36
-
37
- start_time = Time.now
38
-
39
- # kick it off
40
- message = ZMQ::Message.new("a" * message_size)
41
- assert(s1.sendmsg(message, ZMQ::NonBlocking))
42
-
43
- i = roundtrip_count
44
-
45
- until i.zero?
46
- i -= 1
47
-
48
- assert(poller.poll_nonblock)
49
-
50
- poller.readables.each do |socket|
51
- received_message = ''
52
- assert(socket.recv_string(received_message, ZMQ::NonBlocking))
53
- assert(socket.sendmsg(ZMQ::Message.new(received_message), ZMQ::NonBlocking))
54
- end
55
- end
56
-
57
- elapsed_usecs = (Time.now.to_f - start_time.to_f) * 1_000_000
58
- latency = elapsed_usecs / roundtrip_count / 2
59
-
60
- puts "mean latency: %.3f [us]" % latency
61
- puts "received all messages in %.3f seconds" % (elapsed_usecs / 1_000_000)
62
-
63
- assert(s1.close)
64
- assert(s2.close)
65
-
66
- ctx.terminate