em-zeromq 0.4.0 → 0.4.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.
- data/README.md +2 -0
- data/Rakefile +1 -0
- data/em-zeromq.gemspec +1 -1
- data/example/multi-part.rb +3 -0
- data/example/simple.rb +1 -0
- data/example/simpler.rb +1 -0
- data/lib/em-zeromq.rb +7 -0
- data/lib/em-zeromq/socket.rb +38 -28
- data/lib/em-zeromq/version.rb +1 -1
- data/spec/context_spec.rb +1 -10
- data/spec/pub_sub_spec.rb +4 -4
- data/spec/socket_spec.rb +29 -0
- data/spec/spec_helper.rb +3 -7
- metadata +8 -6
    
        data/README.md
    CHANGED
    
    | @@ -66,6 +66,7 @@ EM.run { | |
| 66 66 |  | 
| 67 67 | 
             
              pull.on(:message) { |part|
         | 
| 68 68 | 
             
                puts part.copy_out_string
         | 
| 69 | 
            +
                part.close
         | 
| 69 70 | 
             
              }
         | 
| 70 71 |  | 
| 71 72 | 
             
              EM.add_periodic_timer(1) {
         | 
| @@ -73,6 +74,7 @@ EM.run { | |
| 73 74 | 
             
              }
         | 
| 74 75 | 
             
            }
         | 
| 75 76 | 
             
            ```
         | 
| 77 | 
            +
            Note that it's important to close message parts to avoid memory leaks.
         | 
| 76 78 |  | 
| 77 79 | 
             
            ## License: ##
         | 
| 78 80 |  | 
    
        data/Rakefile
    CHANGED
    
    
    
        data/em-zeromq.gemspec
    CHANGED
    
    | @@ -17,7 +17,7 @@ Gem::Specification.new do |s| | |
| 17 17 |  | 
| 18 18 | 
             
              s.add_dependency 'eventmachine', '>= 1.0.0'
         | 
| 19 19 | 
             
              s.add_dependency 'ffi', '>= 1.0.0'
         | 
| 20 | 
            -
              s.add_dependency 'ffi-rzmq', '0.9. | 
| 20 | 
            +
              s.add_dependency 'ffi-rzmq', '= 0.9.7'
         | 
| 21 21 |  | 
| 22 22 | 
             
              s.add_development_dependency 'rspec', '>= 2.5.0'
         | 
| 23 23 | 
             
              s.add_development_dependency 'simplecov'
         | 
    
        data/example/multi-part.rb
    CHANGED
    
    | @@ -13,10 +13,13 @@ EM.run { | |
| 13 13 |  | 
| 14 14 | 
             
              pull.on(:message) { |part1, part2|
         | 
| 15 15 | 
             
                p [:part1, part1.copy_out_string, :part2, part2.copy_out_string]
         | 
| 16 | 
            +
                part1.close
         | 
| 17 | 
            +
                part2.close
         | 
| 16 18 | 
             
              }
         | 
| 17 19 |  | 
| 18 20 | 
             
              pull.on(:message) { |*parts|
         | 
| 19 21 | 
             
                p [:parts, parts.map(&:copy_out_string)]
         | 
| 22 | 
            +
                parts.each(&:close)
         | 
| 20 23 | 
             
              }
         | 
| 21 24 |  | 
| 22 25 | 
             
              push = zmq.socket(ZMQ::PUSH)
         | 
    
        data/example/simple.rb
    CHANGED
    
    
    
        data/example/simpler.rb
    CHANGED
    
    
    
        data/lib/em-zeromq.rb
    CHANGED
    
    
    
        data/lib/em-zeromq/socket.rb
    CHANGED
    
    | @@ -6,7 +6,7 @@ module EventMachine | |
| 6 6 |  | 
| 7 7 | 
             
                  include EventEmitter
         | 
| 8 8 |  | 
| 9 | 
            -
                  attr_reader   :socket, :socket_type | 
| 9 | 
            +
                  attr_reader   :socket, :socket_type
         | 
| 10 10 |  | 
| 11 11 | 
             
                  def initialize(socket, socket_type)
         | 
| 12 12 | 
             
                    @socket      = socket
         | 
| @@ -15,43 +15,53 @@ module EventMachine | |
| 15 15 | 
             
                    self.notify_readable = true if READABLES.include?(socket_type)
         | 
| 16 16 | 
             
                    self.notify_writable = true if WRITABLES.include?(socket_type)
         | 
| 17 17 | 
             
                  end
         | 
| 18 | 
            -
             | 
| 18 | 
            +
             | 
| 19 19 | 
             
                  def self.map_sockopt(opt, name)
         | 
| 20 20 | 
             
                    define_method(name){ getsockopt(opt) }
         | 
| 21 | 
            -
                    define_method("#{name}="){|val|  | 
| 21 | 
            +
                    define_method("#{name}="){|val| setsockopt(opt, val) }
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  if defined?(ZMQ::HWM)
         | 
| 25 | 
            +
                    map_sockopt(ZMQ::HWM, :hwm)
         | 
| 26 | 
            +
                  else
         | 
| 27 | 
            +
                    map_sockopt(ZMQ::SNDHWM, :sndhwm)
         | 
| 28 | 
            +
                    map_sockopt(ZMQ::RCVHWM, :rcvhwm)
         | 
| 29 | 
            +
                    def hwm=(val)
         | 
| 30 | 
            +
                      self.sndhwm = val
         | 
| 31 | 
            +
                      self.rcvhwm = val
         | 
| 32 | 
            +
                    end
         | 
| 22 33 | 
             
                  end
         | 
| 23 | 
            -
             | 
| 24 | 
            -
                  map_sockopt(ZMQ:: | 
| 25 | 
            -
                  map_sockopt(ZMQ::SWAP, :swap)
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                  map_sockopt(ZMQ::SWAP, :swap) if defined?(ZMQ::SWAP)
         | 
| 26 36 | 
             
                  map_sockopt(ZMQ::IDENTITY, :identity)
         | 
| 27 37 | 
             
                  map_sockopt(ZMQ::AFFINITY, :affinity)
         | 
| 28 38 | 
             
                  map_sockopt(ZMQ::SNDBUF, :sndbuf)
         | 
| 29 39 | 
             
                  map_sockopt(ZMQ::RCVBUF, :rcvbuf)
         | 
| 30 | 
            -
             | 
| 40 | 
            +
             | 
| 31 41 | 
             
                  # pgm
         | 
| 32 42 | 
             
                  map_sockopt(ZMQ::RATE, :rate)
         | 
| 33 43 | 
             
                  map_sockopt(ZMQ::RECOVERY_IVL, :recovery_ivl)
         | 
| 34 | 
            -
                  map_sockopt(ZMQ::MCAST_LOOP, :mcast_loop)
         | 
| 35 | 
            -
             | 
| 44 | 
            +
                  map_sockopt(ZMQ::MCAST_LOOP, :mcast_loop) if defined?(ZMQ::MCAST_LOOP)
         | 
| 45 | 
            +
             | 
| 36 46 | 
             
                  # User method
         | 
| 37 47 | 
             
                  def bind(address)
         | 
| 38 48 | 
             
                    @socket.bind(address)
         | 
| 39 49 | 
             
                  end
         | 
| 40 | 
            -
             | 
| 50 | 
            +
             | 
| 41 51 | 
             
                  def connect(address)
         | 
| 42 52 | 
             
                    @socket.connect(address)
         | 
| 43 53 | 
             
                  end
         | 
| 44 | 
            -
             | 
| 54 | 
            +
             | 
| 45 55 | 
             
                  def subscribe(what = '')
         | 
| 46 56 | 
             
                    raise "only valid on sub socket type (was #{@socket.name})" unless @socket.name == 'SUB'
         | 
| 47 57 | 
             
                    @socket.setsockopt(ZMQ::SUBSCRIBE, what)
         | 
| 48 58 | 
             
                  end
         | 
| 49 | 
            -
             | 
| 59 | 
            +
             | 
| 50 60 | 
             
                  def unsubscribe(what)
         | 
| 51 61 | 
             
                    raise "only valid on sub socket type (was #{@socket.name})" unless @socket.name == 'SUB'
         | 
| 52 62 | 
             
                    @socket.setsockopt(ZMQ::UNSUBSCRIBE, what)
         | 
| 53 63 | 
             
                  end
         | 
| 54 | 
            -
             | 
| 64 | 
            +
             | 
| 55 65 | 
             
                  # send a non blocking message
         | 
| 56 66 | 
             
                  # parts:  if only one argument is given a signle part message is sent
         | 
| 57 67 | 
             
                  #         if more than one arguments is given a multipart message is sent
         | 
| @@ -61,34 +71,34 @@ module EventMachine | |
| 61 71 | 
             
                  def send_msg(*parts)
         | 
| 62 72 | 
             
                    parts = Array(parts[0]) if parts.size == 0
         | 
| 63 73 | 
             
                    sent = true
         | 
| 64 | 
            -
             | 
| 74 | 
            +
             | 
| 65 75 | 
             
                    # multipart
         | 
| 66 76 | 
             
                    parts[0...-1].each do |msg|
         | 
| 67 | 
            -
                       | 
| 68 | 
            -
                      if  | 
| 77 | 
            +
                      ret = @socket.send_string(msg, ZMQ::NOBLOCK | ZMQ::SNDMORE)
         | 
| 78 | 
            +
                      if ret < 0
         | 
| 79 | 
            +
                        sent = false
         | 
| 69 80 | 
             
                        break
         | 
| 70 81 | 
             
                      end
         | 
| 71 82 | 
             
                    end
         | 
| 72 | 
            -
             | 
| 83 | 
            +
             | 
| 73 84 | 
             
                    if sent
         | 
| 74 85 | 
             
                      # all the previous parts were queued, send
         | 
| 75 86 | 
             
                      # the last one
         | 
| 76 87 | 
             
                      ret = @socket.send_string(parts[-1], ZMQ::NOBLOCK)
         | 
| 77 88 | 
             
                      if ret < 0
         | 
| 78 | 
            -
                         | 
| 89 | 
            +
                        sent = false
         | 
| 79 90 | 
             
                      end
         | 
| 80 91 | 
             
                    else
         | 
| 81 92 | 
             
                      # error while sending the previous parts
         | 
| 82 93 | 
             
                      # register the socket for writability
         | 
| 83 94 | 
             
                      self.notify_writable = true
         | 
| 84 | 
            -
                      sent = false
         | 
| 85 95 | 
             
                    end
         | 
| 86 | 
            -
             | 
| 96 | 
            +
             | 
| 87 97 | 
             
                    EM::next_tick{ notify_readable() }
         | 
| 88 | 
            -
             | 
| 98 | 
            +
             | 
| 89 99 | 
             
                    sent
         | 
| 90 100 | 
             
                  end
         | 
| 91 | 
            -
             | 
| 101 | 
            +
             | 
| 92 102 | 
             
                  def getsockopt(opt)
         | 
| 93 103 | 
             
                    ret = []
         | 
| 94 104 | 
             
                    rc = @socket.getsockopt(opt, ret)
         | 
| @@ -96,9 +106,9 @@ module EventMachine | |
| 96 106 | 
             
                      raise ZMQOperationFailed, "getsockopt: #{ZMQ::Util.error_string}"
         | 
| 97 107 | 
             
                    end
         | 
| 98 108 |  | 
| 99 | 
            -
                    (ret.size == 1) ? ret[0] : ret | 
| 109 | 
            +
                    (ret.size == 1) ? ret[0] : ret
         | 
| 100 110 | 
             
                  end
         | 
| 101 | 
            -
             | 
| 111 | 
            +
             | 
| 102 112 | 
             
                  def setsockopt(opt, value)
         | 
| 103 113 | 
             
                    @socket.setsockopt(opt, value)
         | 
| 104 114 | 
             
                  end
         | 
| @@ -119,15 +129,15 @@ module EventMachine | |
| 119 129 | 
             
                      emit(:message, *message)
         | 
| 120 130 | 
             
                    end
         | 
| 121 131 | 
             
                  end
         | 
| 122 | 
            -
             | 
| 132 | 
            +
             | 
| 123 133 | 
             
                  def notify_writable
         | 
| 124 134 | 
             
                    return unless writable?
         | 
| 125 | 
            -
             | 
| 135 | 
            +
             | 
| 126 136 | 
             
                    # one a writable event is successfully received the socket
         | 
| 127 137 | 
             
                    # should be accepting messages again so stop triggering
         | 
| 128 138 | 
             
                    # write events
         | 
| 129 139 | 
             
                    self.notify_writable = false
         | 
| 130 | 
            -
             | 
| 140 | 
            +
             | 
| 131 141 | 
             
                    emit(:writable)
         | 
| 132 142 | 
             
                  end
         | 
| 133 143 | 
             
                  def readable?
         | 
| @@ -139,7 +149,7 @@ module EventMachine | |
| 139 149 | 
             
                    # ZMQ::EVENTS has issues in ZMQ HEAD, we'll ignore this till they're fixed
         | 
| 140 150 | 
             
                    # (getsockopt(ZMQ::EVENTS) & ZMQ::POLLOUT) == ZMQ::POLLOUT
         | 
| 141 151 | 
             
                  end
         | 
| 142 | 
            -
             | 
| 152 | 
            +
             | 
| 143 153 | 
             
                private
         | 
| 144 154 |  | 
| 145 155 | 
             
                  def get_message
         | 
    
        data/lib/em-zeromq/version.rb
    CHANGED
    
    
    
        data/spec/context_spec.rb
    CHANGED
    
    | @@ -4,19 +4,10 @@ describe 'Context' do | |
| 4 4 | 
             
              before do
         | 
| 5 5 | 
             
                @ctx = EM::ZeroMQ::Context.new(1)
         | 
| 6 6 | 
             
              end
         | 
| 7 | 
            -
             | 
| 7 | 
            +
             | 
| 8 8 | 
             
              it 'can be created with a context' do
         | 
| 9 9 | 
             
                zmq_ctx = ZMQ::Context.new(1)
         | 
| 10 10 | 
             
                ctx = EM::ZeroMQ::Context.new( zmq_ctx )
         | 
| 11 11 | 
             
                ctx.instance_variable_get('@context').should == zmq_ctx
         | 
| 12 12 | 
             
              end
         | 
| 13 | 
            -
              
         | 
| 14 | 
            -
              it 'can create socket' do
         | 
| 15 | 
            -
                EM::run do
         | 
| 16 | 
            -
                  s = @ctx.socket(ZMQ::ROUTER)
         | 
| 17 | 
            -
                  s.instance_variable_get('@socket').name.should == 'ROUTER'
         | 
| 18 | 
            -
                  EM::stop_event_loop
         | 
| 19 | 
            -
                end
         | 
| 20 | 
            -
              end
         | 
| 21 13 | 
             
            end
         | 
| 22 | 
            -
             | 
    
        data/spec/pub_sub_spec.rb
    CHANGED
    
    | @@ -18,7 +18,7 @@ describe EventMachine::ZeroMQ do | |
| 18 18 | 
             
                  @received = []
         | 
| 19 19 | 
             
                  @test_message = test_message = "TMsg#{rand(999)}"
         | 
| 20 20 |  | 
| 21 | 
            -
                  run_reactor do
         | 
| 21 | 
            +
                  run_reactor(0.2) do
         | 
| 22 22 | 
             
                    address = rand_addr
         | 
| 23 23 |  | 
| 24 24 | 
             
                    sub_conn  = SPEC_CTX.socket(ZMQ::SUB)
         | 
| @@ -31,9 +31,9 @@ describe EventMachine::ZeroMQ do | |
| 31 31 | 
             
                    pub_conn  = SPEC_CTX.socket(ZMQ::PUB)
         | 
| 32 32 | 
             
                    pub_conn.connect(address)
         | 
| 33 33 |  | 
| 34 | 
            -
                     | 
| 35 | 
            -
             | 
| 36 | 
            -
                     | 
| 34 | 
            +
                    EM::Timer.new(0.1) do
         | 
| 35 | 
            +
                      pub_conn.socket.send_string test_message, ZMQ::NOBLOCK
         | 
| 36 | 
            +
                    end
         | 
| 37 37 | 
             
                  end
         | 
| 38 38 | 
             
                end
         | 
| 39 39 |  | 
    
        data/spec/socket_spec.rb
    ADDED
    
    | @@ -0,0 +1,29 @@ | |
| 1 | 
            +
            require File.join(File.dirname(__FILE__), %w[spec_helper])
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe 'Socket' do
         | 
| 4 | 
            +
              before do
         | 
| 5 | 
            +
                @ctx = EM::ZeroMQ::Context.new(1)
         | 
| 6 | 
            +
              end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              it 'can create a socket' do
         | 
| 9 | 
            +
                EM.run do
         | 
| 10 | 
            +
                  s = @ctx.socket(ZMQ::ROUTER)
         | 
| 11 | 
            +
                  s.instance_variable_get('@socket').name.should == 'ROUTER'
         | 
| 12 | 
            +
                  EM.stop
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              it 'can set hwm' do
         | 
| 17 | 
            +
                EM.run do
         | 
| 18 | 
            +
                  s = @ctx.socket(ZMQ::PUSH)
         | 
| 19 | 
            +
                  s.hwm = 100
         | 
| 20 | 
            +
                  if defined?(ZMQ::HWM)
         | 
| 21 | 
            +
                    s.hwm.should == 100
         | 
| 22 | 
            +
                  else
         | 
| 23 | 
            +
                    s.rcvhwm.should == 100
         | 
| 24 | 
            +
                    s.sndhwm.should == 100
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
                  EM.stop
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
            end
         | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    | @@ -11,14 +11,10 @@ require File.expand_path( | |
| 11 11 | 
             
                File.join(File.dirname(__FILE__), %w[.. lib em-zeromq]))
         | 
| 12 12 |  | 
| 13 13 | 
             
            def run_reactor(time=0.1,&block)
         | 
| 14 | 
            -
               | 
| 15 | 
            -
                 | 
| 16 | 
            -
             | 
| 17 | 
            -
                end
         | 
| 14 | 
            +
              EM.run do
         | 
| 15 | 
            +
                yield
         | 
| 16 | 
            +
                EM.add_timer(time){EM.stop}
         | 
| 18 17 | 
             
              end
         | 
| 19 | 
            -
              sleep time
         | 
| 20 | 
            -
              EM.stop rescue nil
         | 
| 21 | 
            -
              sleep 0.1
         | 
| 22 18 | 
             
            end
         | 
| 23 19 |  | 
| 24 20 | 
             
            USED_RAND_ADDRS = Set.new
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: em-zeromq
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.4. | 
| 4 | 
            +
              version: 0.4.1
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -10,7 +10,7 @@ authors: | |
| 10 10 | 
             
            autorequire: 
         | 
| 11 11 | 
             
            bindir: bin
         | 
| 12 12 | 
             
            cert_chain: []
         | 
| 13 | 
            -
            date:  | 
| 13 | 
            +
            date: 2013-01-09 00:00:00.000000000 Z
         | 
| 14 14 | 
             
            dependencies:
         | 
| 15 15 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 16 16 | 
             
              name: eventmachine
         | 
| @@ -51,7 +51,7 @@ dependencies: | |
| 51 51 | 
             
                requirements:
         | 
| 52 52 | 
             
                - - '='
         | 
| 53 53 | 
             
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            -
                    version: 0.9. | 
| 54 | 
            +
                    version: 0.9.7
         | 
| 55 55 | 
             
              type: :runtime
         | 
| 56 56 | 
             
              prerelease: false
         | 
| 57 57 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| @@ -59,7 +59,7 @@ dependencies: | |
| 59 59 | 
             
                requirements:
         | 
| 60 60 | 
             
                - - '='
         | 
| 61 61 | 
             
                  - !ruby/object:Gem::Version
         | 
| 62 | 
            -
                    version: 0.9. | 
| 62 | 
            +
                    version: 0.9.7
         | 
| 63 63 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 64 64 | 
             
              name: rspec
         | 
| 65 65 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -135,6 +135,7 @@ files: | |
| 135 135 | 
             
            - spec/pub_sub_spec.rb
         | 
| 136 136 | 
             
            - spec/push_pull_spec.rb
         | 
| 137 137 | 
             
            - spec/router_dealer_spec.rb
         | 
| 138 | 
            +
            - spec/socket_spec.rb
         | 
| 138 139 | 
             
            - spec/spec_helper.rb
         | 
| 139 140 | 
             
            homepage: https://github.com/andrewvc/em-zeromq
         | 
| 140 141 | 
             
            licenses: []
         | 
| @@ -152,7 +153,7 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 152 153 | 
             
                  version: '0'
         | 
| 153 154 | 
             
                  segments:
         | 
| 154 155 | 
             
                  - 0
         | 
| 155 | 
            -
                  hash:  | 
| 156 | 
            +
                  hash: -528291771408101050
         | 
| 156 157 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 157 158 | 
             
              none: false
         | 
| 158 159 | 
             
              requirements:
         | 
| @@ -161,7 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 161 162 | 
             
                  version: '0'
         | 
| 162 163 | 
             
                  segments:
         | 
| 163 164 | 
             
                  - 0
         | 
| 164 | 
            -
                  hash:  | 
| 165 | 
            +
                  hash: -528291771408101050
         | 
| 165 166 | 
             
            requirements: []
         | 
| 166 167 | 
             
            rubyforge_project: em-zeromq
         | 
| 167 168 | 
             
            rubygems_version: 1.8.24
         | 
| @@ -173,4 +174,5 @@ test_files: | |
| 173 174 | 
             
            - spec/pub_sub_spec.rb
         | 
| 174 175 | 
             
            - spec/push_pull_spec.rb
         | 
| 175 176 | 
             
            - spec/router_dealer_spec.rb
         | 
| 177 | 
            +
            - spec/socket_spec.rb
         | 
| 176 178 | 
             
            - spec/spec_helper.rb
         |