ffi-rzmq 1.0.3 → 2.0.1

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.
Files changed (55) hide show
  1. checksums.yaml +7 -0
  2. data/.travis.yml +1 -1
  3. data/AUTHORS.txt +5 -1
  4. data/History.txt +24 -0
  5. data/README.rdoc +2 -4
  6. data/examples/README.rdoc +1 -3
  7. data/examples/{v3api/latency_measurement.rb → latency_measurement.rb} +1 -2
  8. data/examples/{v3api/local_lat.rb → local_lat.rb} +1 -1
  9. data/examples/{v3api/local_lat_poll.rb → local_lat_poll.rb} +4 -4
  10. data/examples/{v3api/local_throughput.rb → local_throughput.rb} +1 -1
  11. data/examples/{v3api/pub.rb → pub.rb} +1 -1
  12. data/examples/{v2api/publish_subscribe.rb → publish_subscribe.rb} +2 -2
  13. data/examples/{v2api/remote_lat.rb → remote_lat.rb} +1 -1
  14. data/examples/{v3api/remote_throughput.rb → remote_throughput.rb} +4 -3
  15. data/examples/repreq_over_curve.rb +60 -0
  16. data/examples/{v2api/reqrep_poll.rb → reqrep_poll.rb} +3 -4
  17. data/examples/{v2api/request_response.rb → request_response.rb} +1 -2
  18. data/examples/{v3api/sub.rb → sub.rb} +1 -2
  19. data/examples/{v3api/throughput_measurement.rb → throughput_measurement.rb} +1 -1
  20. data/examples/{v3api/xreqxrep_poll.rb → xreqxrep_poll.rb} +6 -7
  21. data/ffi-rzmq.gemspec +4 -4
  22. data/lib/ffi-rzmq/context.rb +25 -53
  23. data/lib/ffi-rzmq/device.rb +8 -4
  24. data/lib/ffi-rzmq/exceptions.rb +3 -0
  25. data/lib/ffi-rzmq/message.rb +24 -30
  26. data/lib/ffi-rzmq/poll.rb +5 -16
  27. data/lib/ffi-rzmq/socket.rb +132 -282
  28. data/lib/ffi-rzmq/util.rb +28 -36
  29. data/lib/ffi-rzmq/version.rb +1 -1
  30. data/lib/ffi-rzmq.rb +2 -3
  31. data/spec/context_spec.rb +3 -8
  32. data/spec/device_spec.rb +10 -9
  33. data/spec/nonblocking_recv_spec.rb +7 -7
  34. data/spec/pushpull_spec.rb +8 -7
  35. data/spec/reqrep_spec.rb +6 -6
  36. data/spec/socket_spec.rb +43 -130
  37. data/spec/spec_helper.rb +3 -11
  38. data/spec/util_spec.rb +28 -0
  39. metadata +80 -104
  40. data/examples/v2api/latency_measurement.rb +0 -139
  41. data/examples/v2api/local_lat.rb +0 -58
  42. data/examples/v2api/local_lat_poll.rb +0 -66
  43. data/examples/v2api/local_throughput.rb +0 -58
  44. data/examples/v2api/pub.rb +0 -46
  45. data/examples/v2api/remote_throughput.rb +0 -39
  46. data/examples/v2api/sub.rb +0 -74
  47. data/examples/v2api/throughput_measurement.rb +0 -138
  48. data/examples/v2api/xreqxrep_poll.rb +0 -93
  49. data/examples/v3api/publish_subscribe.rb +0 -82
  50. data/examples/v3api/remote_lat.rb +0 -71
  51. data/examples/v3api/reqrep_poll.rb +0 -62
  52. data/examples/v3api/request_response.rb +0 -40
  53. data/lib/ffi-rzmq/constants.rb +0 -187
  54. data/lib/ffi-rzmq/libc.rb +0 -19
  55. data/lib/ffi-rzmq/libzmq.rb +0 -283
metadata CHANGED
@@ -1,73 +1,67 @@
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.1
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:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- segments:
28
- - 0
29
- version: "0"
11
+ date: 2014-01-22 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:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: 1.0.1
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:
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: 1.0.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
37
31
  - - ~>
38
- - !ruby/object:Gem::Version
39
- segments:
40
- - 2
41
- - 6
42
- version: "2.6"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.14'
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:
50
- - - ">="
51
- - !ruby/object:Gem::Version
52
- segments:
53
- - 0
54
- version: "0"
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '2.14'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
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:
64
+ files:
71
65
  - .bnsignore
72
66
  - .gitignore
73
67
  - .travis.yml
@@ -77,41 +71,26 @@ files:
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
@@ -132,37 +111,33 @@ files:
132
111
  - spec/spec_helper.rb
133
112
  - spec/support/test.crt
134
113
  - spec/support/test.key
135
- has_rdoc: true
114
+ - spec/util_spec.rb
136
115
  homepage: http://github.com/chuckremes/ffi-rzmq
137
- licenses: []
138
-
116
+ licenses:
117
+ - MIT
118
+ metadata: {}
139
119
  post_install_message:
140
120
  rdoc_options: []
141
-
142
- require_paths:
121
+ require_paths:
143
122
  - lib
144
- required_ruby_version: !ruby/object:Gem::Requirement
145
- requirements:
146
- - - ">="
147
- - !ruby/object:Gem::Version
148
- segments:
149
- - 0
150
- version: "0"
151
- required_rubygems_version: !ruby/object:Gem::Requirement
152
- requirements:
153
- - - ">="
154
- - !ruby/object:Gem::Version
155
- segments:
156
- - 0
157
- version: "0"
123
+ required_ruby_version: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - '>='
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ required_rubygems_version: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - '>='
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
158
133
  requirements: []
159
-
160
134
  rubyforge_project: ffi-rzmq
161
- rubygems_version: 1.3.6
135
+ rubygems_version: 2.0.14
162
136
  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:
137
+ specification_version: 4
138
+ summary: This gem wraps the ZeroMQ (0mq) networking library using Ruby FFI (foreign
139
+ function interface).
140
+ test_files:
166
141
  - spec/context_spec.rb
167
142
  - spec/device_spec.rb
168
143
  - spec/message_spec.rb
@@ -175,3 +150,4 @@ test_files:
175
150
  - spec/spec_helper.rb
176
151
  - spec/support/test.crt
177
152
  - spec/support/test.key
153
+ - 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
@@ -1,58 +0,0 @@
1
-
2
- require File.join(File.dirname(__FILE__), '..', '..', 'lib', 'ffi-rzmq')
3
-
4
- if ARGV.length != 3
5
- puts "usage: ruby local_throughtput.rb <bind-to> <message-size> <message-count>"
6
- Process.exit
7
- end
8
-
9
- def assert(rc)
10
- raise "Last API call failed at #{caller(1)}" unless rc >= 0
11
- end
12
-
13
- bind_to = ARGV[0]
14
- message_size = ARGV[1].to_i
15
- message_count = ARGV[2].to_i
16
-
17
- begin
18
- ctx = ZMQ::Context.new
19
- s = ZMQ::Socket.new(ctx.pointer, ZMQ::SUB)
20
- rescue ContextError => e
21
- STDERR.puts "Failed to allocate context or socket!"
22
- raise
23
- end
24
-
25
- assert(s.setsockopt(ZMQ::LINGER, 100))
26
- assert(s.setsockopt(ZMQ::SUBSCRIBE, ""))
27
-
28
- assert(s.bind(bind_to))
29
-
30
- msg = ZMQ::Message.new
31
- assert(s.recvmsg(msg))
32
-
33
- start_time = Time.now
34
-
35
- i = 1
36
- while i < message_count
37
- assert(s.recvmsg(msg))
38
- i += 1
39
- end
40
-
41
- end_time = Time.now
42
-
43
- elapsed = (end_time.to_f - start_time.to_f) * 1000000
44
- if elapsed == 0
45
- elapsed = 1
46
- end
47
-
48
- throughput = message_count * 1000000 / elapsed
49
- megabits = throughput * message_size * 8 / 1000000
50
-
51
- puts "message size: %i [B]" % message_size
52
- puts "message count: %i" % message_count
53
- puts "mean throughput: %i [msg/s]" % throughput
54
- puts "mean throughput: %.3f [Mb/s]" % megabits
55
-
56
- assert(s.close)
57
-
58
- ctx.terminate
@@ -1,46 +0,0 @@
1
-
2
- require File.join(File.dirname(__FILE__), '..', '..', 'lib', 'ffi-rzmq')
3
-
4
- if ARGV.length != 3
5
- puts "usage: ruby remote_throughput.rb <connect-to> <message-size> <message-count>"
6
- Process.exit
7
- end
8
-
9
- connect_to = ARGV[0]
10
- message_size = ARGV[1].to_i
11
- message_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
- s = ZMQ::Socket.new(ctx.pointer, ZMQ::PUB)
20
- rescue ContextError => e
21
- STDERR.puts "Could not allocate a context or socket!"
22
- raise
23
- end
24
-
25
- #assert(s.setsockopt(ZMQ::LINGER, 1_000))
26
- #assert(s.setsockopt(ZMQ::RCVHWM, 0))
27
- assert(s.setsockopt(ZMQ::HWM, 10))
28
- assert(s.bind(connect_to))
29
-
30
- # the sleep gives the downstream SUB socket a chance to register its
31
- # subscription filters with this PUB socket
32
- puts "Hit any key to start publishing"
33
- STDIN.gets
34
-
35
- i = 0
36
- while i < message_count
37
- msg = ZMQ::Message.new(i.to_s)
38
- assert(s.sendmsg(msg))
39
- puts i
40
- i += 1
41
- end
42
-
43
- sleep 10
44
- assert(s.close)
45
-
46
- ctx.terminate
@@ -1,39 +0,0 @@
1
-
2
- require File.join(File.dirname(__FILE__), '..', '..', 'lib', 'ffi-rzmq')
3
-
4
- if ARGV.length != 3
5
- puts "usage: ruby remote_throughput.rb <connect-to> <message-size> <message-count>"
6
- Process.exit
7
- end
8
-
9
- connect_to = ARGV[0]
10
- message_size = ARGV[1].to_i
11
- message_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
- s = ZMQ::Socket.new(ctx.pointer, ZMQ::PUB)
20
- rescue ContextError => e
21
- STDERR.puts "Could not allocate a context or socket!"
22
- raise
23
- end
24
-
25
- assert(s.setsockopt(ZMQ::LINGER, 1_000))
26
- assert(s.connect(connect_to))
27
-
28
- contents = "#{'0'*message_size}"
29
-
30
- i = 0
31
- while i < message_count
32
- msg = ZMQ::Message.new(contents)
33
- assert(s.sendmsg(msg))
34
- i += 1
35
- end
36
-
37
- assert(s.close)
38
-
39
- ctx.terminate