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 125616
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 1316
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 1258
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 1296
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 1291
def self.stop_pool @pool_proxy&.kill @pool_proxy = nil end
Instance Attribute Details
#alive? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'lib/drb/drb.rb', line 1332
def alive? # :nodoc: return false unless @protocol @protocol.alive? end
#uri (readonly)
[ GitHub ]# File 'lib/drb/drb.rb', line 1320
attr_reader :uri # :nodoc:
Instance Method Details
#close
[ GitHub ]# File 'lib/drb/drb.rb', line 1327
def close # :nodoc: @protocol.close @protocol = nil end
#send_message(ref, msg_id, arg, block)
[ GitHub ]# File 'lib/drb/drb.rb', line 1322
def (ref, msg_id, arg, block) # :nodoc: @protocol.send_request(ref, msg_id, arg, block) @protocol.recv_reply end