RPC - Remote Procedure Call

Calculator {
  number Add(number a, number b);
  number Mul(number a, number b);
}

  Server                Client
 ┌─────────────┐       ┌───────────────────────────────────┐
 │ ┌───────────│───────│───────────────┐                   │
 │ │ Remote    │  RPC  │   Calculator  │ Add(1, 2)         │
 │ │ Calculator│◄──────│── Stub ◄────────────────── Client │
 │ └───────────│───────│───────────────┘                   │
 └─────────────┘   ▲   └───────────────────────────────────┘
                   │

      Service   (call)        -> Serialize args
      Channel   (concurrency) -> Serialize request
      Transport (send, recv)  -> Send message

Layers

   Server              Network       Client
   ------              -------      ------
                     |            |  Stub.Add(1,2)
                     |            |  Channel
   IServer ◄────────── Transport ◄── ISocket
   RPC Server        |            |
   Service.Add(1, 2) |            |