At its core Bondy is a WAMP router, responsible for routing messages between WAMP clients, it does that by performing two main roles: Dealer and Broker. In addition, the router is also responsible for many other tasks.
Routed RPC
The Dealer is responsible for routing remote procedure calls between Callers and Callees.
The beauty of Routed RPC is that Callers and Callees do not need to know each other to collaborate. The Caller makes a call request to the Router (Dealer) based on a known procedure, represented as a reverse URI e.g. com.example-app.add. The Dealer then finds a Callee who has registered an implementation of the procedure and forwards it the call. When the Callee replies with a response, the Dealer forwards the response to the Caller.
WAMP and Serverless
If you accept the definition of serverless computing to be a programming model in which "the concept of a server is not visible in the application logic" then WAMP is a protocol for serverless computing. As a Caller I do not care who implements the procedure I am calling, nor how it is implemented. It can be implemented by a large service, a microservice or a lamdba stateless function.
All this interaction is done asynchronously, thus neither the Caller nor the Callee are blocked. In fact, not even the Dealer is blocked.
Finally, if multiple Callees (or instances of the same Callee) registered the same procedure, Bondy will load balance requests across those instances. Whether or not load balancing is used and which algorithm in play is controlled by the Callee during procedure registration.
PubSub Broker
The Broker is responsible for routing events between Publishers and Subscribers.
Registry
TBD
Connection Management
The router is responsible for listening and handling new client connections through multiple transports and maintaining those connections.
Session management
maintaining session state including the client's procedure registrations and subscriptions.
Transcoding
encoding/decoding the messages according a Session's defined encoding