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;