ffi-rzmq 0.5.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +2 -0
- data/History.txt +35 -0
- data/README.rdoc +14 -30
- data/examples/README.rdoc +163 -0
- data/examples/local_throughput.rb +43 -0
- data/examples/remote_throughput.rb +27 -0
- data/examples/xreqxrep_poll.rb +1 -1
- data/ffi-rzmq.gemspec +8 -8
- data/lib/ffi-rzmq/context.rb +18 -8
- data/lib/ffi-rzmq/message.rb +112 -48
- data/lib/ffi-rzmq/poll_items.rb +1 -1
- data/lib/ffi-rzmq/socket.rb +43 -19
- data/lib/ffi-rzmq/wrapper.rb +4 -7
- data/lib/ffi-rzmq/zmq.rb +16 -3
- data/spec/context_spec.rb +10 -2
- data/spec/message_spec.rb +42 -0
- data/spec/pushpull_spec.rb +70 -0
- data/spec/socket_spec.rb +192 -13
- data/spec/spec_helper.rb +2 -0
- data/version.txt +1 -1
- metadata +75 -68
- data/.bnsignore +0 -22
- data/examples/async_req_rep.rb +0 -42
- data/examples/t +0 -5228
data/spec/context_spec.rb
CHANGED
@@ -13,6 +13,14 @@ module ZMQ
|
|
13
13
|
it "should raise an error for negative io threads" do
|
14
14
|
lambda { Context.new(-1) }.should raise_exception(ZMQ::ContextError)
|
15
15
|
end
|
16
|
+
|
17
|
+
it "should default to requesting 1 i/o thread when no argument is passed" do
|
18
|
+
ctx = mock('ctx')
|
19
|
+
ctx.stub!(:null? => false)
|
20
|
+
LibZMQ.should_receive(:zmq_init).with(1).and_return(ctx)
|
21
|
+
|
22
|
+
Context.new
|
23
|
+
end
|
16
24
|
|
17
25
|
it "should set the :pointer accessor to non-nil" do
|
18
26
|
ctx = Context.new 1
|
@@ -43,7 +51,7 @@ module ZMQ
|
|
43
51
|
ctx.terminate
|
44
52
|
end
|
45
53
|
|
46
|
-
it "should raise
|
54
|
+
it "should raise a ZMQ::ContextError exception when it fails" do
|
47
55
|
ctx = Context.new 1
|
48
56
|
LibZMQ.stub(:zmq_term => 1)
|
49
57
|
lambda { ctx.terminate }.should raise_error(ZMQ::ContextError)
|
@@ -57,7 +65,7 @@ module ZMQ
|
|
57
65
|
ctx.socket(ZMQ::REQ).should be_kind_of(ZMQ::Socket)
|
58
66
|
end
|
59
67
|
|
60
|
-
it "should raise
|
68
|
+
it "should raise a ZMQ::SocketError exception when allocation fails" do
|
61
69
|
ctx = Context.new 1
|
62
70
|
Socket.stub(:new => nil)
|
63
71
|
lambda { ctx.socket(ZMQ::REQ) }.should raise_error(ZMQ::SocketError)
|
@@ -0,0 +1,42 @@
|
|
1
|
+
|
2
|
+
require File.join(File.dirname(__FILE__), %w[spec_helper])
|
3
|
+
|
4
|
+
module ZMQ
|
5
|
+
|
6
|
+
|
7
|
+
describe Message do
|
8
|
+
|
9
|
+
context "when initializing with an argument" do
|
10
|
+
|
11
|
+
it "should *not* define a finalizer on this object" do
|
12
|
+
ObjectSpace.should_not_receive(:define_finalizer)
|
13
|
+
Message.new "text"
|
14
|
+
end
|
15
|
+
end # context initializing
|
16
|
+
|
17
|
+
|
18
|
+
context "when copying in data" do
|
19
|
+
it "should raise a MessageError when the Message is being reused" do
|
20
|
+
message = Message.new "text"
|
21
|
+
lambda { message.copy_in_string("new text") }.should raise_error(MessageError)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end # describe Message
|
26
|
+
|
27
|
+
|
28
|
+
describe ManagedMessage do
|
29
|
+
|
30
|
+
context "when initializing with an argument" do
|
31
|
+
|
32
|
+
it "should define a finalizer on this object" do
|
33
|
+
ObjectSpace.should_receive(:define_finalizer)
|
34
|
+
ManagedMessage.new "text"
|
35
|
+
end
|
36
|
+
end # context initializing
|
37
|
+
|
38
|
+
|
39
|
+
end # describe ManagedMessage
|
40
|
+
|
41
|
+
|
42
|
+
end # module ZMQ
|
@@ -0,0 +1,70 @@
|
|
1
|
+
|
2
|
+
require File.join(File.dirname(__FILE__), %w[spec_helper])
|
3
|
+
|
4
|
+
module ZMQ
|
5
|
+
describe Context do
|
6
|
+
context "when running basic push pull" do
|
7
|
+
include APIHelper
|
8
|
+
|
9
|
+
let(:string) { "booga-booga" }
|
10
|
+
|
11
|
+
before(:each) do
|
12
|
+
$stdout.flush
|
13
|
+
@context = ZMQ::Context.new 1
|
14
|
+
@push = @context.socket ZMQ::PUSH
|
15
|
+
@pull = @context.socket ZMQ::PULL
|
16
|
+
@link = "tcp://127.0.0.1:#{random_port}"
|
17
|
+
@pull.connect @link
|
18
|
+
@push.bind @link
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should receive an exact copy of the sent message using Message objects directly on one pull socket" do
|
22
|
+
@push.send_string string
|
23
|
+
received = @pull.recv_string
|
24
|
+
received.should == string
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should receive an exact string copy of the message sent when receiving in non-blocking mode and using Message objects directly" do
|
28
|
+
sent_message = Message.new string
|
29
|
+
received_message = Message.new
|
30
|
+
|
31
|
+
@push.send sent_message
|
32
|
+
sleep 0.1 # give it time for delivery
|
33
|
+
@pull.recv received_message, ZMQ::NOBLOCK
|
34
|
+
received_message.copy_out_string.should == string
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should receive an exact string copy of the message sent when sending in non-blocking mode and using Message objects directly" do
|
38
|
+
sent_message = Message.new string
|
39
|
+
received_message = Message.new
|
40
|
+
|
41
|
+
@push.send sent_message, ZMQ::NOBLOCK
|
42
|
+
sleep 0.1 # give it time for delivery
|
43
|
+
@pull.recv received_message, ZMQ::NOBLOCK
|
44
|
+
received_message.copy_out_string.should == string
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should receive a single message for each message sent on each socket listening, when an equal number pulls to messages" do
|
48
|
+
received = []
|
49
|
+
threads = []
|
50
|
+
count = 4
|
51
|
+
|
52
|
+
count.times {
|
53
|
+
threads << Thread.new {
|
54
|
+
pull = @context.socket ZMQ::PULL
|
55
|
+
pull.connect @link
|
56
|
+
received << pull.recv_string
|
57
|
+
pull.close
|
58
|
+
}
|
59
|
+
}
|
60
|
+
|
61
|
+
count.times { @push.send_string(string); sleep 0.001 }
|
62
|
+
|
63
|
+
threads.each {|t| t.join}
|
64
|
+
|
65
|
+
received.find_all {|r| r == string}.length.should == count
|
66
|
+
end
|
67
|
+
|
68
|
+
end # @context ping-pong
|
69
|
+
end # describe
|
70
|
+
end # module ZMQ
|
data/spec/socket_spec.rb
CHANGED
@@ -9,7 +9,7 @@ module ZMQ
|
|
9
9
|
context "when initializing" do
|
10
10
|
|
11
11
|
let(:ctx) { Context.new 1 }
|
12
|
-
|
12
|
+
|
13
13
|
it "should raise an error for a nil context" do
|
14
14
|
lambda { Socket.new(FFI::Pointer::NULL, ZMQ::REQ) }.should raise_exception(ZMQ::ContextError)
|
15
15
|
end
|
@@ -54,9 +54,13 @@ module ZMQ
|
|
54
54
|
lambda { Socket.new(ctx.pointer, 80) }.should raise_exception(ZMQ::SocketError)
|
55
55
|
end
|
56
56
|
|
57
|
-
it "should set the :socket accessor to
|
58
|
-
|
59
|
-
|
57
|
+
it "should set the :socket accessor to the raw socket allocated by libzmq" do
|
58
|
+
socket = mock('socket')#.as_null_object
|
59
|
+
socket.stub!(:null? => false)
|
60
|
+
LibZMQ.should_receive(:zmq_socket).and_return(socket)
|
61
|
+
|
62
|
+
sock = Socket.new(ctx.pointer, ZMQ::REQ)
|
63
|
+
sock.socket.should == socket
|
60
64
|
end
|
61
65
|
|
62
66
|
it "should define a finalizer on this object" do
|
@@ -65,47 +69,222 @@ module ZMQ
|
|
65
69
|
ctx = Context.new 1
|
66
70
|
end
|
67
71
|
end # context initializing
|
68
|
-
|
69
|
-
|
72
|
+
|
73
|
+
|
70
74
|
context "identity=" do
|
71
75
|
it "should raise an exception for identities in excess of 255 bytes" do
|
72
76
|
ctx = Context.new 1
|
73
77
|
sock = Socket.new ctx.pointer, ZMQ::REQ
|
74
|
-
|
78
|
+
|
75
79
|
lambda { sock.identity = ('a' * 256) }.should raise_exception(ZMQ::SocketError)
|
76
80
|
end
|
77
81
|
|
78
82
|
it "should raise an exception for identities of length 0" do
|
79
83
|
ctx = Context.new 1
|
80
84
|
sock = Socket.new ctx.pointer, ZMQ::REQ
|
81
|
-
|
85
|
+
|
82
86
|
lambda { sock.identity = '' }.should raise_exception(ZMQ::SocketError)
|
83
87
|
end
|
84
88
|
|
85
89
|
it "should NOT raise an exception for identities of 1 byte" do
|
86
90
|
ctx = Context.new 1
|
87
91
|
sock = Socket.new ctx.pointer, ZMQ::REQ
|
88
|
-
|
92
|
+
|
89
93
|
lambda { sock.identity = 'a' }.should_not raise_exception(ZMQ::SocketError)
|
90
94
|
end
|
91
95
|
|
92
96
|
it "should NOT raise an exception for identities of 255 bytes" do
|
93
97
|
ctx = Context.new 1
|
94
98
|
sock = Socket.new ctx.pointer, ZMQ::REQ
|
95
|
-
|
99
|
+
|
96
100
|
lambda { sock.identity = ('a' * 255) }.should_not raise_exception(ZMQ::SocketError)
|
97
101
|
end
|
98
102
|
|
99
103
|
it "should convert numeric identities to strings" do
|
100
104
|
ctx = Context.new 1
|
101
105
|
sock = Socket.new ctx.pointer, ZMQ::REQ
|
102
|
-
|
106
|
+
|
103
107
|
sock.identity = 7
|
104
108
|
sock.identity.should == '7'
|
105
109
|
end
|
106
110
|
end # context identity=
|
107
|
-
|
108
|
-
|
111
|
+
|
112
|
+
|
113
|
+
[ZMQ::REQ, ZMQ::REP, ZMQ::XREQ, ZMQ::XREP, ZMQ::PUB, ZMQ::SUB, ZMQ::PUSH, ZMQ::PULL, ZMQ::PAIR].each do |socket_type|
|
114
|
+
|
115
|
+
context "#setsockopt for a #{ZMQ::SocketTypeNameMap[socket_type]} socket" do
|
116
|
+
let(:socket) do
|
117
|
+
ctx = Context.new
|
118
|
+
Socket.new ctx.pointer, socket_type
|
119
|
+
end
|
120
|
+
|
121
|
+
|
122
|
+
context "using option ZMQ::SUBSCRIBE" do
|
123
|
+
if ZMQ::SUB == socket_type
|
124
|
+
it "should *not* raise a ZMQ::SocketError" do
|
125
|
+
lambda { socket.setsockopt(ZMQ::SUBSCRIBE, "topic.string") }.should_not raise_error(SocketError)
|
126
|
+
end
|
127
|
+
else
|
128
|
+
it "should raise a ZMQ::SocketError" do
|
129
|
+
lambda { socket.setsockopt(ZMQ::SUBSCRIBE, "topic.string") }.should raise_error(SocketError)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end # context using option ZMQ::SUBSCRIBE
|
133
|
+
|
134
|
+
|
135
|
+
context "using option ZMQ::UNSUBSCRIBE" do
|
136
|
+
if ZMQ::SUB == socket_type
|
137
|
+
it "should *not* raise a ZMQ::SocketError given a topic string that was previously subscribed" do
|
138
|
+
socket.setsockopt ZMQ::SUBSCRIBE, "topic.string"
|
139
|
+
lambda { socket.setsockopt(ZMQ::UNSUBSCRIBE, "topic.string") }.should_not raise_error(SocketError)
|
140
|
+
end
|
141
|
+
|
142
|
+
it "should raise a ZMQ::SocketError given a topic string that was never subscribed" do
|
143
|
+
socket.setsockopt ZMQ::SUBSCRIBE, "topic.string"
|
144
|
+
lambda { socket.setsockopt(ZMQ::UNSUBSCRIBE, "unknown") }.should raise_error(SocketError)
|
145
|
+
end
|
146
|
+
else
|
147
|
+
it "should raise a ZMQ::SocketError" do
|
148
|
+
lambda { socket.setsockopt(ZMQ::UNSUBSCRIBE, "topic.string") }.should raise_error(SocketError)
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end # context using option ZMQ::UNSUBSCRIBE
|
152
|
+
|
153
|
+
|
154
|
+
context "using option ZMQ::HWM" do
|
155
|
+
it "should set the high water mark given a positive value" do
|
156
|
+
hwm = 4
|
157
|
+
socket.setsockopt ZMQ::HWM, hwm
|
158
|
+
socket.getsockopt(ZMQ::HWM).should == hwm
|
159
|
+
end
|
160
|
+
|
161
|
+
it "should convert a negative value to a positive value" do
|
162
|
+
hwm = -4
|
163
|
+
socket.setsockopt ZMQ::HWM, hwm
|
164
|
+
socket.getsockopt(ZMQ::HWM).should == hwm.abs
|
165
|
+
end
|
166
|
+
end # context using option ZMQ::HWM
|
167
|
+
|
168
|
+
|
169
|
+
# context "using option ZMQ::SWAP" do
|
170
|
+
# it "should set the swap value given a positive value" do
|
171
|
+
# swap = 10_000
|
172
|
+
# socket.setsockopt ZMQ::SWAP, swap
|
173
|
+
# socket.getsockopt(ZMQ::SWAP).should == swap
|
174
|
+
# end
|
175
|
+
#
|
176
|
+
# it "should raise a SocketError given a negative value" do
|
177
|
+
# swap = -10_000
|
178
|
+
# lambda { socket.setsockopt(ZMQ::SWAP, swap) }.should raise_error(SocketError)
|
179
|
+
# end
|
180
|
+
# end # context using option ZMQ::SWP
|
181
|
+
|
182
|
+
|
183
|
+
context "using option ZMQ::AFFINITY" do
|
184
|
+
it "should set the affinity value given a positive value" do
|
185
|
+
affinity = 3
|
186
|
+
socket.setsockopt ZMQ::AFFINITY, affinity
|
187
|
+
socket.getsockopt(ZMQ::AFFINITY).should == affinity
|
188
|
+
end
|
189
|
+
|
190
|
+
it "should set the affinity value as a positive value given a negative value" do
|
191
|
+
affinity = -3
|
192
|
+
socket.setsockopt ZMQ::AFFINITY, affinity
|
193
|
+
socket.getsockopt(ZMQ::AFFINITY).should == affinity.abs
|
194
|
+
end
|
195
|
+
end # context using option ZMQ::AFFINITY
|
196
|
+
|
197
|
+
|
198
|
+
context "using option ZMQ::IDENTITY" do
|
199
|
+
it "should set the identity given any string under 255 characters" do
|
200
|
+
(1..255).each do |length|
|
201
|
+
identity = 'a' * length
|
202
|
+
socket.setsockopt ZMQ::IDENTITY, identity
|
203
|
+
socket.getsockopt(ZMQ::IDENTITY).should == identity
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
it "should raise a SocketError given a string 256 characters or longer" do
|
208
|
+
identity = 'a' * 256
|
209
|
+
lambda { socket.setsockopt(ZMQ::IDENTITY, identity) }.should raise_error(SocketError)
|
210
|
+
end
|
211
|
+
end # context using option ZMQ::IDENTITY
|
212
|
+
|
213
|
+
|
214
|
+
# context "using option ZMQ::RATE" do
|
215
|
+
# it "should set the multicast send rate given a positive value" do
|
216
|
+
# rate = 200
|
217
|
+
# socket.setsockopt ZMQ::RATE, rate
|
218
|
+
# socket.getsockopt(ZMQ::RATE).should == rate
|
219
|
+
# end
|
220
|
+
#
|
221
|
+
# it "should raise a SocketError given a negative value" do
|
222
|
+
# rate = -200
|
223
|
+
# lambda { socket.setsockopt ZMQ::RATE, rate }.should raise_error(SocketError)
|
224
|
+
# end
|
225
|
+
# end # context using option ZMQ::RATE
|
226
|
+
#
|
227
|
+
#
|
228
|
+
# context "using option ZMQ::RECOVERY_IVL" do
|
229
|
+
# it "should set the multicast recovery buffer measured in seconds given a positive value" do
|
230
|
+
# rate = 200
|
231
|
+
# socket.setsockopt ZMQ::RECOVERY_IVL, rate
|
232
|
+
# socket.getsockopt(ZMQ::RECOVERY_IVL).should == rate
|
233
|
+
# end
|
234
|
+
#
|
235
|
+
# it "should raise a SocketError given a negative value" do
|
236
|
+
# rate = -200
|
237
|
+
# lambda { socket.setsockopt ZMQ::RECOVERY_IVL, rate }.should raise_error(SocketError)
|
238
|
+
# end
|
239
|
+
# end # context using option ZMQ::RECOVERY_IVL
|
240
|
+
|
241
|
+
|
242
|
+
context "using option ZMQ::MCAST_LOOP" do
|
243
|
+
it "should enable the multicast loopback given a true value" do
|
244
|
+
socket.setsockopt ZMQ::MCAST_LOOP, true
|
245
|
+
socket.getsockopt(ZMQ::MCAST_LOOP).should be_true
|
246
|
+
end
|
247
|
+
|
248
|
+
it "should disable the multicast loopback given a false value" do
|
249
|
+
socket.setsockopt ZMQ::MCAST_LOOP, false
|
250
|
+
socket.getsockopt(ZMQ::MCAST_LOOP).should be_false
|
251
|
+
end
|
252
|
+
end # context using option ZMQ::MCAST_LOOP
|
253
|
+
|
254
|
+
|
255
|
+
context "using option ZMQ::SNDBUF" do
|
256
|
+
it "should set the OS send buffer given a positive value" do
|
257
|
+
size = 100
|
258
|
+
socket.setsockopt ZMQ::SNDBUF, size
|
259
|
+
socket.getsockopt(ZMQ::SNDBUF).should == size
|
260
|
+
end
|
261
|
+
|
262
|
+
it "should set the OS send buffer to a positive value given a false value" do
|
263
|
+
size = -100
|
264
|
+
socket.setsockopt ZMQ::SNDBUF, size
|
265
|
+
socket.getsockopt(ZMQ::SNDBUF).should == size.abs
|
266
|
+
end
|
267
|
+
end # context using option ZMQ::SNDBUF
|
268
|
+
|
269
|
+
|
270
|
+
context "using option ZMQ::RCVBUF" do
|
271
|
+
it "should set the OS receive buffer given a positive value" do
|
272
|
+
size = 100
|
273
|
+
socket.setsockopt ZMQ::RCVBUF, size
|
274
|
+
socket.getsockopt(ZMQ::RCVBUF).should == size
|
275
|
+
end
|
276
|
+
|
277
|
+
it "should set the OS receive buffer to a positive value given a false value" do
|
278
|
+
size = -100
|
279
|
+
socket.setsockopt ZMQ::RCVBUF, size
|
280
|
+
socket.getsockopt(ZMQ::RCVBUF).should == size.abs
|
281
|
+
end
|
282
|
+
end # context using option ZMQ::RCVBUF
|
283
|
+
end # context #setsockopt
|
284
|
+
|
285
|
+
end # each socket_type
|
286
|
+
|
287
|
+
|
109
288
|
end # describe Socket
|
110
289
|
|
111
290
|
|
data/spec/spec_helper.rb
CHANGED
data/version.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.6.0
|
metadata
CHANGED
@@ -3,39 +3,40 @@ name: ffi-rzmq
|
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
version: 0.
|
6
|
+
- 0
|
7
|
+
- 6
|
8
|
+
- 0
|
9
|
+
version: 0.6.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
|
-
|
12
|
+
- Chuck Remes
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-09-21 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: bones
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 3
|
30
|
+
- 4
|
31
|
+
- 7
|
32
|
+
version: 3.4.7
|
33
|
+
type: :development
|
34
|
+
version_requirements: *id001
|
34
35
|
description: |-
|
35
36
|
This gem wraps the ZeroMQ networking library using the ruby FFI (foreign
|
36
37
|
function interface). It's a pure ruby wrapper so this gem can be loaded
|
37
|
-
and run by any ruby runtime that supports FFI.
|
38
|
-
MRI 1.9.x and JRuby.
|
38
|
+
and run by any ruby runtime that supports FFI. That's all of them:
|
39
|
+
MRI 1.8.7+, 1.9.x, Rubinius and JRuby.
|
39
40
|
|
40
41
|
The impetus behind this library was to provide support for ZeroMQ in
|
41
42
|
JRuby which has native threads. Unlike MRI, MacRuby, IronRuby and
|
@@ -49,67 +50,73 @@ executables: []
|
|
49
50
|
extensions: []
|
50
51
|
|
51
52
|
extra_rdoc_files:
|
52
|
-
|
53
|
-
|
54
|
-
|
53
|
+
- History.txt
|
54
|
+
- README.rdoc
|
55
|
+
- examples/README.rdoc
|
56
|
+
- version.txt
|
55
57
|
files:
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
58
|
+
- .gitignore
|
59
|
+
- History.txt
|
60
|
+
- README.rdoc
|
61
|
+
- Rakefile
|
62
|
+
- examples/README.rdoc
|
63
|
+
- examples/local_lat.rb
|
64
|
+
- examples/local_lat_zerocopy.rb
|
65
|
+
- examples/local_throughput.rb
|
66
|
+
- examples/publish_subscribe.rb
|
67
|
+
- examples/remote_lat.rb
|
68
|
+
- examples/remote_lat_zerocopy.rb
|
69
|
+
- examples/remote_throughput.rb
|
70
|
+
- examples/reqrep_poll.rb
|
71
|
+
- examples/request_response.rb
|
72
|
+
- examples/xreqxrep_poll.rb
|
73
|
+
- ffi-rzmq.gemspec
|
74
|
+
- lib/ffi-rzmq.rb
|
75
|
+
- lib/ffi-rzmq/context.rb
|
76
|
+
- lib/ffi-rzmq/exceptions.rb
|
77
|
+
- lib/ffi-rzmq/message.rb
|
78
|
+
- lib/ffi-rzmq/poll.rb
|
79
|
+
- lib/ffi-rzmq/poll_items.rb
|
80
|
+
- lib/ffi-rzmq/socket.rb
|
81
|
+
- lib/ffi-rzmq/wrapper.rb
|
82
|
+
- lib/ffi-rzmq/zmq.rb
|
83
|
+
- spec/context_spec.rb
|
84
|
+
- spec/message_spec.rb
|
85
|
+
- spec/pushpull_spec.rb
|
86
|
+
- spec/reqrep_spec.rb
|
87
|
+
- spec/socket_spec.rb
|
88
|
+
- spec/spec_helper.rb
|
89
|
+
- version.txt
|
85
90
|
has_rdoc: true
|
86
91
|
homepage: http://github.com/chuckremes/ffi-rzmq
|
87
92
|
licenses: []
|
88
93
|
|
89
94
|
post_install_message:
|
90
95
|
rdoc_options:
|
91
|
-
|
92
|
-
|
96
|
+
- --main
|
97
|
+
- README.rdoc
|
93
98
|
require_paths:
|
94
|
-
|
99
|
+
- lib
|
95
100
|
required_ruby_version: !ruby/object:Gem::Requirement
|
101
|
+
none: false
|
96
102
|
requirements:
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
segments:
|
106
|
+
- 0
|
107
|
+
version: "0"
|
102
108
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
|
+
none: false
|
103
110
|
requirements:
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
111
|
+
- - ">="
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
segments:
|
114
|
+
- 0
|
115
|
+
version: "0"
|
109
116
|
requirements: []
|
110
117
|
|
111
118
|
rubyforge_project: ffi-rzmq
|
112
|
-
rubygems_version: 1.3.
|
119
|
+
rubygems_version: 1.3.7
|
113
120
|
signing_key:
|
114
121
|
specification_version: 3
|
115
122
|
summary: This gem wraps the ZeroMQ networking library using the ruby FFI (foreign function interface)
|