Flowdock

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:

accept
Accept a new connection to the server. Returns a protocol instance capable of communicating with the client.
close
Close the server connection.
uri
Get the URI for this server.

The protocol instance returned by #open must have the following methods:

send_request (ref, msg_id, arg, b)
Send a request to ref with the given message id and arguments. This is most easily implemented by calling DRbMessage.send_request, providing a stream that sits on top of the current protocol.
recv_reply
Receive a reply from the server and return it as a [success-boolean, reply-value] pair. This is most easily implemented by calling DRb.recv_reply, providing a stream that sits on top of the current protocol.
alive?
Is this connection still alive?
close
Close this connection.

The protocol instance returned by #open_server().accept() must have the following methods:

recv_request
Receive a request from the client and return a [object, message, args, block] tuple. This is most easily implemented by calling DRbMessage.recv_request, providing a stream that sits on top of the current protocol.
send_reply(succ, result)
Send a reply to the client. This is most easily implemented by calling DRbMessage.send_reply, providing a stream that sits on top of the current protocol.
close
Close this connection.

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.

Show files where this module is defined (1 file)
Register or log in to add new notes.