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 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