Class: MessagePack::RPC::SessionPool

Inherits:
Object
  • Object
show all
Includes:
LoopUtil
Defined in:
lib/msgpack/rpc/session_pool.rb

Overview

SessionPool is usable for connection pooling. You can get pooled Session using get_session method. Note that SessionPool includes LoopUtil.

Direct Known Subclasses

Server

Instance Attribute Summary

Attributes included from LoopUtil

#loop

Instance Method Summary collapse

Methods included from LoopUtil

#run, #start_timer, #stop, #submit

Constructor Details

#initialize(arg1 = nil, arg2 = nil) ⇒ SessionPool

  1. initialize(builder, loop = Loop.new)

  2. initialize(loop = Loop.new)

Creates an SessionPool.



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/msgpack/rpc/session_pool.rb', line 30

def initialize(arg1=nil, arg2=nil)
  if arg1.respond_to?(:build_transport)
    # 1.
    builder = arg1
    loop    = arg2 || Loop.new
  else
    # 2.
    builder = TCPTransport.new
    loop    = arg1 || Loop.new
  end

  @builder = builder
  @loop = loop
  @pool = {}

  @timer = Timer.new(1, true, &method(:step_timeout))
  loop.attach(@timer)
end

Instance Method Details

#closeObject



72
73
74
75
76
77
78
79
# File 'lib/msgpack/rpc/session_pool.rb', line 72

def close
  @pool.reject! {|addr, s|
    s.close
    true
  }
  @timer.detach if @timer.attached?
  nil
end

#get_session(arg1, arg2 = nil) ⇒ Object Also known as: get_session_addr

  1. get_session(address)

  2. get_session(host, port)

Returns pooled Session. If there are no pooled Session for the specified address, this method creates the Session and pools it.



55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/msgpack/rpc/session_pool.rb', line 55

def get_session(arg1, arg2=nil)
  if arg2.nil?
    # 1.
    addr = arg1
  else
    # 2.
    host = arg1
    port = arg2
    addr = Address.new(host, port)
  end

  @pool[addr] ||= Session.new(@builder, addr, @loop)
end