JSON publishing over moq-net tracks, in three modes:
- [
snapshot]: lossy. One JSON value updated over time; a consumer only gets the most recent value. Intermediate updates are collapsed and older groups are dropped. - [
stream]: lossless. An ordered append-log of self-contained records; every record is preserved and delivered in order, nothing is ever superseded. - [
window]: bounded. An ordered run of records appended to the back and dropped from the front, which a reader can join at any point.
Pick [snapshot] when consumers care about "what is the value now" (a catalog, a status
document), [stream] when they care about every record of an unbounded log, and [window] when
the publisher retires old records and a late reader should start from what is still retained.
Each mode comes in two layers. Producer/Consumer own a [moq_net] track and manage its
groups. Encoder/Decoder are the same logic without the track: values in, frame payloads out
(and back), with the encoder saying where the group boundaries fall. Reach for the codec layer
when something else already owns the track, such as a moq_mux::container::Producer also
managing a timeline and a catalog estimate.