Backpressure contract for slow subscribers
Rivet currently uses a bounded per-subscriber queue before handing messages to Drift. When a client stops reading, we need a clear contract between the channel layer and the transport layer.
The main options are:
* block publishers until the subscriber catches up;
* drop messages when the queue is full;
* disconnect the slow subscriber with an explicit reason.
My preference is a bounded queue followed by disconnection, because silently dropping messages would break Rivet’s delivery semantics. What guarantees can Drift provide when WebSocket writes remain backpressured?