| In FIDL protocols, using two-way methods with empty responses for flow control |
| purposes (e.g. `DoSomething(...) -> ();`) has a fundamental drawback for latency |
| sensitive protocols: either callers wait for each reply before sending the next |
| message, thereby increasing per-message latency, or they ignore it, which |
| renders the empty reply itself pointless. For protocols that desire flow control |
| without these latency costs, a good alternative is the *feed forward pattern*. |
| In this setup, one or more one-way methods write data to the server, while some |
| other method (one-way or two-way) is used to "commit" the work and synchronize |
| between the client and server. This means arbitrary amounts of data can be |
| transferred as fast as they can be sent, but there is still some amount of flow |
| control, as the synchronization method forces the client to stop before |
| proceeding with more work. |
| |
| <<../examples/canvas/_callout.md>> |
| <<../examples/canvas/_client_requested_draw_tutorial.md>> |