client determines…
Which server should it connect to?
-service name, version number…
How will it connect to that server?
-IP address, network protocol,…
Registry == database of available services
-search for service name to find service (which) and contact details (now)
-deistributed
any RPC service can register
-machine-specific
for services running on same machine
client must know machine address
-> registry provides port number needed for connection
Application use binding & registries
procedure interface: foo(int, int*) in local calls: foo(x, y) => ok in remote calls: foo(x, y) => ???
handling partial failer
when a client hangs..
– server down? service down? network down? message lost?
– timeout and tretry => no guarantees
struct square_in {
int arg1;
};
struct square_out {
int res1;
};
program SQUARE_PROG {
version SQUARE_VERS {
square_out SQUARE_PROG(square_in) = 1;
} = 1;
} = 0x31230000;