Class: DRb::DRbConn
    Do not use.  This class is for internal use only.
  
| Relationships & Source Files | |
| Inherits: | Object | 
| Defined in: | lib/drb/drb.rb | 
Overview
Class handling the connection between a DRbObject and the server the real object lives on.
This class maintains a pool of connections, to reduce the overhead of starting and closing down connections for each method call.
This class is used internally by DRbObject.  The user does not normally need to deal with it directly.
Constant Summary
- 
    POOL_SIZE =
    
 # File 'lib/drb/drb.rb', line 128516
Class Method Summary
Instance Attribute Summary
- #alive? ⇒ Boolean readonly
- #uri readonly
Instance Method Summary
Constructor Details
    .new(remote_uri)  ⇒ DRbConn 
  
# File 'lib/drb/drb.rb', line 1345
def initialize(remote_uri) # :nodoc: @uri = remote_uri @protocol = DRbProtocol.open(remote_uri, DRb.config) end
Class Method Details
.make_pool
[ GitHub ]# File 'lib/drb/drb.rb', line 1287
def self.make_pool ThreadObject.new do |queue| pool = [] while true queue._execute do || case([0]) when :take then remote_uri = [1] conn = nil new_pool = [] pool.each do |c| if conn.nil? and c.uri == remote_uri conn = c if c.alive? else new_pool.push c end end pool = new_pool conn when :store then conn = [1] pool.unshift(conn) pool.pop.close while pool.size > POOL_SIZE conn else nil end end end end end
.open(remote_uri)
[ GitHub ]# File 'lib/drb/drb.rb', line 1325
def self.open(remote_uri) # :nodoc: begin @pool_proxy = make_pool unless @pool_proxy&.alive? conn = @pool_proxy.take(remote_uri) conn = self.new(remote_uri) unless conn succ, result = yield(conn) return succ, result ensure if conn if succ @pool_proxy.store(conn) else conn.close end end end end
.stop_pool
[ GitHub ]# File 'lib/drb/drb.rb', line 1320
def self.stop_pool @pool_proxy&.kill @pool_proxy = nil end
Instance Attribute Details
    #alive?  ⇒ Boolean  (readonly)
  
  [ GitHub ]
# File 'lib/drb/drb.rb', line 1361
def alive? # :nodoc: return false unless @protocol @protocol.alive? end
#uri (readonly)
[ GitHub ]# File 'lib/drb/drb.rb', line 1349
attr_reader :uri # :nodoc:
Instance Method Details
#close
[ GitHub ]# File 'lib/drb/drb.rb', line 1356
def close # :nodoc: @protocol.close @protocol = nil end
#send_message(ref, msg_id, arg, block)
[ GitHub ]# File 'lib/drb/drb.rb', line 1351
def (ref, msg_id, arg, block) # :nodoc: @protocol.send_request(ref, msg_id, arg, block) @protocol.recv_reply end