There are three major ways for a message exchange: Fire-And-Forget, Reply-Response and Request-Callback.
Fire-And-Forget (one-way)
A Client sends a message to a Server without expecting an answer.
|Client| |Server| |---- Message ---->|
Reply-Response (two-way, synchronous)
A Client sends a message to a Server and waits for the response/timeout.
The sending thread gets blocked til the response/timeout occurs.
|Client| |Server| |---- Reply ---->| |<--- Response ----|
Request-Callback (two-way, asynchronous)
A Client sends a message to a Server and waits for the callback/timeout.
The sending thread doesn't get blocked til the callback/timeout occurs.
|Client| |Server| |---- Request ---->| | | |<--- Callback ----|