Module | DRb::DRbProtocol |
In: |
lib/drb/drb.rb
|
Module managing the underlying network protocol(s) used by drb.
By default, drb uses the DRbTCPSocket protocol. Other protocols can be defined. A protocol must define the following class methods:
[open(uri, config)] Open a client connection to the server at +uri+, using configuration +config+. Return a protocol instance for this connection. [open_server(uri, config)] Open a server listening at +uri+, using configuration +config+. Return a protocol instance for this listener. [uri_option(uri, config)] Take a URI, possibly containing an option component (e.g. a trailing '?param=val'), and return a [uri, option] tuple.
All of these methods should raise a DRbBadScheme error if the URI does not identify the protocol they support (e.g. "druby:" for the standard Ruby protocol). This is how the DRbProtocol module, given a URI, determines which protocol implementation serves that protocol.
The protocol instance returned by open_server must have the following methods:
The protocol instance returned by open must have the following methods:
The protocol instance returned by open_server().accept() must have the following methods:
A new protocol is registered with the DRbProtocol module using the add_protocol method.
For examples of other protocols, see DRbUNIXSocket in drb/unix.rb, and HTTP0 in sample/http0.rb and sample/http0serv.rb in the full drb distribution.
Add a new protocol to the DRbProtocol module.
# File lib/drb/drb.rb, line 716 716: def add_protocol(prot) 717: @protocol.push(prot) 718: end
Open a client connection to uri with the configuration config.
The DRbProtocol module asks each registered protocol in turn to try to open the URI. Each protocol signals that it does not handle that URI by raising a DRbBadScheme error. If no protocol recognises the URI, then a DRbBadURI error is raised. If a protocol accepts the URI, but an error occurs in opening it, a DRbConnError is raised.
# File lib/drb/drb.rb, line 728 728: def open(uri, config, first=true) 729: @protocol.each do |prot| 730: begin 731: return prot.open(uri, config) 732: rescue DRbBadScheme 733: rescue DRbConnError 734: raise($!) 735: rescue 736: raise(DRbConnError, "#{uri} - #{$!.inspect}") 737: end 738: end 739: if first && (config[:auto_load] != false) 740: auto_load(uri, config) 741: return open(uri, config, false) 742: end 743: raise DRbBadURI, 'can\'t parse uri:' + uri 744: end
Open a server listening for connections at uri with configuration config.
The DRbProtocol module asks each registered protocol in turn to try to open a server at the URI. Each protocol signals that it does not handle that URI by raising a DRbBadScheme error. If no protocol recognises the URI, then a DRbBadURI error is raised. If a protocol accepts the URI, but an error occurs in opening it, the underlying error is passed on to the caller.
# File lib/drb/drb.rb, line 756 756: def open_server(uri, config, first=true) 757: @protocol.each do |prot| 758: begin 759: return prot.open_server(uri, config) 760: rescue DRbBadScheme 761: end 762: end 763: if first && (config[:auto_load] != false) 764: auto_load(uri, config) 765: return open_server(uri, config, false) 766: end 767: raise DRbBadURI, 'can\'t parse uri:' + uri 768: end
Parse uri into a [uri, option] pair.
The DRbProtocol module asks each registered protocol in turn to try to parse the URI. Each protocol signals that it does not handle that URI by raising a DRbBadScheme error. If no protocol recognises the URI, then a DRbBadURI error is raised.
# File lib/drb/drb.rb, line 777 777: def uri_option(uri, config, first=true) 778: @protocol.each do |prot| 779: begin 780: uri, opt = prot.uri_option(uri, config) 781: # opt = nil if opt == '' 782: return uri, opt 783: rescue DRbBadScheme 784: end 785: end 786: if first && (config[:auto_load] != false) 787: auto_load(uri, config) 788: return uri_option(uri, config, false) 789: end 790: raise DRbBadURI, 'can\'t parse uri:' + uri 791: end