pigato 0.2.1 → 0.2.2
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.
- checksums.yaml +4 -4
- data/examples/echo_client.rb +1 -1
- data/lib/pigato/client.rb +18 -28
- data/lib/pigato/version.rb +1 -1
- data/lib/pigato/worker.rb +23 -31
- data/lib/pigato.rb +7 -4
- data/pigato.gemspec +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 46d068f4ccf95334efcf4129d0828b8bb71f6749
|
4
|
+
data.tar.gz: 38b9dc5f5d144ba525f739fdbbca1d36906e3b58
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ae471cfaae108c0120960bed457e4bac642d234fc48e3b0bd51b76c03794b4a5c8a0ec2716622c7f7d1e8040c616c8ccdd10cd09118bde0b3ad7b9b3851da474
|
7
|
+
data.tar.gz: 0d9c411dd3bf8623a6a1d726b43dc50b4b8f7bcc296530379e99c01d89e2ce20d442fee90be2be84a45b526a6e1fcf5f7e2e135a956d28b2764561844ec0ad8f
|
data/examples/echo_client.rb
CHANGED
data/lib/pigato/client.rb
CHANGED
@@ -1,13 +1,9 @@
|
|
1
|
-
require "oj"
|
2
|
-
require "securerandom"
|
3
|
-
|
4
1
|
class Pigato::Client
|
5
2
|
|
6
3
|
def initialize broker, conf = {}
|
7
4
|
@broker = broker
|
8
5
|
@context = ZMQ::Context.new(1)
|
9
6
|
@socket = nil
|
10
|
-
@poller = ZMQ::Poller.new
|
11
7
|
|
12
8
|
@conf = {
|
13
9
|
:autostart => false,
|
@@ -28,7 +24,9 @@ class Pigato::Client
|
|
28
24
|
|
29
25
|
rid = SecureRandom.uuid
|
30
26
|
request = [Pigato::C_CLIENT, Pigato::W_REQUEST, service, rid].concat(request)
|
31
|
-
|
27
|
+
msg = ZMQ::Message.new
|
28
|
+
request.reverse.each{|p| msg.push(ZMQ::Frame(p))}
|
29
|
+
@socket.send_message msg
|
32
30
|
|
33
31
|
res = []
|
34
32
|
while 1 do
|
@@ -43,27 +41,20 @@ class Pigato::Client
|
|
43
41
|
end
|
44
42
|
|
45
43
|
def _recv rid, timeout = @timeout
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
end
|
56
|
-
|
57
|
-
return nil if msg.length == 0
|
44
|
+
@socket.rcvtimeo = timeout;
|
45
|
+
data = []
|
46
|
+
d1 = Time.now
|
47
|
+
msg = @socket.recv_message()
|
48
|
+
while 1 do
|
49
|
+
break if !msg || msg.size == 0
|
50
|
+
data << msg.pop.data
|
51
|
+
end
|
52
|
+
data = [] if data[3] != rid
|
58
53
|
|
59
|
-
|
60
|
-
if msg.shift != Pigato::C_CLIENT
|
61
|
-
raise RuntimeError, "Not a valid Pigato message"
|
62
|
-
end
|
54
|
+
return nil if data.length == 0
|
63
55
|
|
64
|
-
|
65
|
-
|
66
|
-
nil
|
56
|
+
data.shift
|
57
|
+
return data
|
67
58
|
end
|
68
59
|
|
69
60
|
def start
|
@@ -76,13 +67,12 @@ class Pigato::Client
|
|
76
67
|
|
77
68
|
def reconnect_to_broker
|
78
69
|
if @socket
|
79
|
-
@
|
70
|
+
@socket.close
|
80
71
|
end
|
81
72
|
|
82
73
|
@socket = @context.socket ZMQ::DEALER
|
83
|
-
@
|
84
|
-
@socket.
|
74
|
+
@context.linger = 0
|
75
|
+
@socket.identity = SecureRandom.uuid
|
85
76
|
@socket.connect @broker
|
86
|
-
@poller.register @socket, ZMQ::POLLIN
|
87
77
|
end
|
88
78
|
end
|
data/lib/pigato/version.rb
CHANGED
data/lib/pigato/worker.rb
CHANGED
@@ -1,7 +1,3 @@
|
|
1
|
-
require "oj"
|
2
|
-
require "ffi-rzmq"
|
3
|
-
require "securerandom"
|
4
|
-
|
5
1
|
class Pigato::Worker
|
6
2
|
|
7
3
|
HEARTBEAT_LIVENESS = 3 # 3-5 is reasonable
|
@@ -10,7 +6,6 @@ class Pigato::Worker
|
|
10
6
|
@broker = broker
|
11
7
|
@service = service
|
12
8
|
@context = ZMQ::Context.new(1)
|
13
|
-
@poller = ZMQ::Poller.new
|
14
9
|
@socket = nil # Socket to broker
|
15
10
|
@heartbeat_at = 0 # When to send HEARTBEAT (relative to time.time(), so in seconds)
|
16
11
|
@liveness = 0 # How many attempts left
|
@@ -27,7 +22,7 @@ class Pigato::Worker
|
|
27
22
|
|
28
23
|
def reply reply
|
29
24
|
reply = [@reply_to, '', @reply_rid, '0'].concat([Oj.dump(reply)])
|
30
|
-
send_to_broker Pigato::W_REPLY, reply
|
25
|
+
send_to_broker Pigato::W_REPLY, reply
|
31
26
|
end
|
32
27
|
|
33
28
|
def recv reply
|
@@ -36,30 +31,28 @@ class Pigato::Worker
|
|
36
31
|
@reply_to = nil
|
37
32
|
@reply_service = nil
|
38
33
|
|
39
|
-
|
40
|
-
if items
|
41
|
-
msg = []
|
42
|
-
@socket.recv_strings msg
|
34
|
+
msg = @socket.recv_message
|
43
35
|
|
36
|
+
if msg && msg.size
|
44
37
|
@liveness = HEARTBEAT_LIVENESS
|
45
38
|
|
46
|
-
header = msg.
|
39
|
+
header = msg.pop.data
|
47
40
|
if header != Pigato::W_WORKER
|
48
41
|
puts "E: Header is not Pigato::WORKER"
|
49
42
|
next
|
50
43
|
end
|
51
44
|
|
52
|
-
command = msg.
|
45
|
+
command = msg.pop.data
|
53
46
|
|
54
47
|
case command
|
55
48
|
when Pigato::W_REQUEST
|
56
49
|
# We should pop and save as many addresses as there are
|
57
50
|
# up to a null part, but for now, just save one...
|
58
|
-
@reply_to = msg.
|
59
|
-
@reply_service = msg.
|
60
|
-
msg.
|
61
|
-
@reply_rid = msg.
|
62
|
-
val = Oj.load(msg
|
51
|
+
@reply_to = msg.pop.data
|
52
|
+
@reply_service = msg.pop.data
|
53
|
+
msg.pop # empty
|
54
|
+
@reply_rid = msg.pop.data
|
55
|
+
val = Oj.load(msg.pop.data) # We have a request to process
|
63
56
|
return val
|
64
57
|
when Pigato::W_HEARTBEAT
|
65
58
|
# do nothing
|
@@ -85,30 +78,29 @@ class Pigato::Worker
|
|
85
78
|
|
86
79
|
def reconnect_to_broker
|
87
80
|
if @socket
|
88
|
-
@poller.deregister @socket, ZMQ::DEALER
|
89
81
|
@socket.close
|
90
82
|
end
|
91
83
|
|
92
84
|
@socket = @context.socket ZMQ::DEALER
|
93
|
-
@
|
94
|
-
@socket.
|
85
|
+
@context.linger = 0
|
86
|
+
@socket.identity = SecureRandom.uuid
|
95
87
|
@socket.connect @broker
|
96
|
-
@
|
97
|
-
send_to_broker
|
88
|
+
@socket.rcvtimeo = @timeout;
|
89
|
+
send_to_broker Pigato::W_READY, @service
|
98
90
|
@liveness = HEARTBEAT_LIVENESS
|
99
91
|
@heartbeat_at = Time.now + 0.001 * @heartbeat
|
100
92
|
end
|
101
93
|
|
102
|
-
def send_to_broker command,
|
103
|
-
if
|
104
|
-
|
105
|
-
elsif not
|
106
|
-
|
94
|
+
def send_to_broker command, data = nil
|
95
|
+
if data.nil?
|
96
|
+
data = []
|
97
|
+
elsif not data.is_a?(Array)
|
98
|
+
data = [data]
|
107
99
|
end
|
108
100
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
@socket.
|
101
|
+
data = [Pigato::W_WORKER, command].concat data
|
102
|
+
msg = ZMQ::Message.new
|
103
|
+
data.reverse.each{|p| msg.push(ZMQ::Frame(p))}
|
104
|
+
@socket.send_message msg
|
113
105
|
end
|
114
106
|
end
|
data/lib/pigato.rb
CHANGED
@@ -1,4 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
require_relative
|
1
|
+
require 'zmq'
|
2
|
+
require 'oj'
|
3
|
+
require 'securerandom'
|
4
|
+
require_relative 'pigato/version.rb'
|
5
|
+
require_relative 'pigato/proto.rb'
|
6
|
+
require_relative 'pigato/client.rb'
|
7
|
+
require_relative 'pigato/worker.rb'
|
data/pigato.gemspec
CHANGED
@@ -21,6 +21,6 @@ Gem::Specification.new do |spec|
|
|
21
21
|
|
22
22
|
spec.add_development_dependency "bundler", "~> 1.8"
|
23
23
|
spec.add_development_dependency "rake", "~> 10.0"
|
24
|
-
spec.add_runtime_dependency "
|
24
|
+
spec.add_runtime_dependency "rbczmq", "~> 1.7.8"
|
25
25
|
spec.add_runtime_dependency "oj", "~> 2.2.0"
|
26
26
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pigato
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paolo Ardoino
|
@@ -39,19 +39,19 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: rbczmq
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 1.7.8
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 1.7.8
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: oj
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|