pigato 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cf42b9ee09f4f2d044a205392c259d2532ca814a
4
- data.tar.gz: bca843c87ada09476d84d73302511193e192b378
3
+ metadata.gz: 46d068f4ccf95334efcf4129d0828b8bb71f6749
4
+ data.tar.gz: 38b9dc5f5d144ba525f739fdbbca1d36906e3b58
5
5
  SHA512:
6
- metadata.gz: ec4378e46841c525850f428c01000b2f3f02a50e1a2587edec105cf2ee3c9376b37d0aa8a9d9a7c00a4fdeadced8fe71984d46e169ac05e0c5547623d33cb44b
7
- data.tar.gz: d680305a50369e71b72db8714d1dd23d3528789ca107e61a5d55a7b22473b6f30506c0f336e90ca707aa358bcee3d0390698b29c45491f4ae324a340a7de0ad0
6
+ metadata.gz: ae471cfaae108c0120960bed457e4bac642d234fc48e3b0bd51b76c03794b4a5c8a0ec2716622c7f7d1e8040c616c8ccdd10cd09118bde0b3ad7b9b3851da474
7
+ data.tar.gz: 0d9c411dd3bf8623a6a1d726b43dc50b4b8f7bcc296530379e99c01d89e2ce20d442fee90be2be84a45b526a6e1fcf5f7e2e135a956d28b2764561844ec0ad8f
@@ -5,7 +5,7 @@ require "#{File.dirname(__FILE__)}/../lib/pigato.rb"
5
5
  #require "pigato"
6
6
 
7
7
  client = Pigato::Client.new('tcp://localhost:55555', { :autostart => true })
8
- requests = 1000
8
+ requests = 10
9
9
  d1 = Time.now
10
10
  requests.times do |i|
11
11
  begin
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
- @socket.send_strings request
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
- items = @poller.poll(timeout)
47
- if items
48
- msg = []
49
- d1 = Time.now
50
- while 1 do
51
- @socket.recv_strings(msg, ZMQ::DONTWAIT)
52
- msg = [] if msg.length < 5 || msg[3] != rid
53
- break if msg.length > 0 || ((Time.now - d1) * 1000 > timeout)
54
- sleep(1.0 / 50.0)
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
- # header
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
- return msg
65
- end
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
- @poller.deregister @socket, ZMQ::DEALER
70
+ @socket.close
80
71
  end
81
72
 
82
73
  @socket = @context.socket ZMQ::DEALER
83
- @socket.setsockopt ZMQ::LINGER, 0
84
- @socket.setsockopt ZMQ::IDENTITY, SecureRandom.uuid
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
@@ -1,3 +1,3 @@
1
1
  module Pigato
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.2"
3
3
  end
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, nil
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
- items = @poller.poll(@timeout)
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.shift
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.shift
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.shift
59
- @reply_service = msg.shift
60
- msg.shift # empty
61
- @reply_rid = msg.shift
62
- val = Oj.load(msg[0]) # We have a request to process
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
- @socket.setsockopt ZMQ::IDENTITY, SecureRandom.uuid
94
- @socket.setsockopt ZMQ::LINGER, 0
85
+ @context.linger = 0
86
+ @socket.identity = SecureRandom.uuid
95
87
  @socket.connect @broker
96
- @poller.register @socket, ZMQ::POLLIN
97
- send_to_broker(Pigato::W_READY, @service, [])
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, message=nil, options=nil
103
- if message.nil?
104
- message = []
105
- elsif not message.is_a?(Array)
106
- message = [message]
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
- message = [Pigato::W_WORKER, command].concat message
110
- message = message.concat(options) if options
111
-
112
- @socket.send_strings message
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
- require_relative "pigato/version.rb"
2
- require_relative "pigato/proto.rb"
3
- require_relative "pigato/client.rb"
4
- require_relative "pigato/worker.rb"
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 "ffi-rzmq", "~> 2.0"
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.1
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: ffi-rzmq
42
+ name: rbczmq
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ~>
46
46
  - !ruby/object:Gem::Version
47
- version: '2.0'
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: '2.0'
54
+ version: 1.7.8
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: oj
57
57
  requirement: !ruby/object:Gem::Requirement