mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-06 14:33:10 -06:00
2 KiB
2 KiB
| nav_exclude |
|---|
| true |
Peeking
Local peeking is implemented as per MSC2753.
Implementationwise, this means:
- Users call
/peekand/unpeekon the clientapi from a given device. - The clientapi delegates these via HTTP to the roomserver, which coordinates peeking in general for a given room
- The roomserver writes an NewPeek event into the kafka log headed to the syncserver
- The syncserver tracks the existence of the local peek in the syncapi_peeks table in its DB, and then starts waking up the peeking devices for the room in question, putting it in the
peeksection of the /sync response.
Peeking over federation is implemented as per MSC2444.
For requests to peek our rooms ("inbound peeks"):
- Remote servers call
/peekon federationapi- The federationapi queries the federationsender to check if this is renewing an inbound peek or not.
- If not, it hits the PerformInboundPeek on the roomserver to ask it for the current state of the room.
- The roomserver atomically (in theory) adds a NewInboundPeek to its kafka stream to tell the federationserver to start peeking.
- The federationsender receives the event, tracks the inbound peek in the federationsender_inbound_peeks table, and starts sending events to the peeking server.
- The federationsender evicts stale inbound peeks which haven't been renewed.
For peeking into other server's rooms ("outbound peeks"):
- The
roomserverwill kick thefederationsendermuch as it does for a federated/joinin order to trigger a federated outbound/peek - The
federationsendertracks the existence of the outbound peek in in its federationsender_outbound_peeks table. - The
federationsenderregularly renews the remote peek as long as there are still peeking devices syncing for it. - TBD: how do we tell if there are no devices currently syncing for a given peeked room? The syncserver needs to tell the roomserver somehow who then needs to warn the federationsender.