Commit 262d02c
authored
Implement events for sync status (#353)
`y-websocket` has a `synced` flag, but it is a bit misleading because it
only tells whether the initial handshake was completed. Knowing whether
a document was synced _in general_ for `y-protocols` is a bit tricky,
because we would need to compare the state vector and delete set.
When using WebSockets, we can take advantage of the ordering guarantee
and synchronous message processing in Y-Sweet to implement a very simple
check of sync.
The client stores two numbers, `lastSyncSent` and `lastSyncAcked`. When
it sends an update to the server, it also increments `lastSyncSent` and
then sends a separate `messageSyncStatus` message containing that number
as the payload.
When the server receives a `messageSyncStatus`, it simply echoes it
verbatim. When the client receives the `messageSyncStatus` in return, it
updates `lastSyncAcked` to the payload of the message.
If `lastSyncAcked` = `lastSyncSent`, we know that all messages since the
last update have been processed. Otherwise, there are outstanding
changes.
This builds on #352 and will enable #306.
Demo:
https://github.com/user-attachments/assets/60d4aec2-f025-4e84-a594-28fbc84c67cb1 parent a881ae7 commit 262d02c
10 files changed
Lines changed: 402 additions & 166 deletions
File tree
- crates/y-sweet/src
- examples/nextjs/src
- app/(demos)/color-grid
- components
- js-pkg
- client/src
- react/src
- tests/src
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
20 | | - | |
21 | 20 | | |
22 | 21 | | |
23 | 22 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
17 | | - | |
| 17 | + | |
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
4 | 5 | | |
5 | 6 | | |
6 | 7 | | |
7 | 8 | | |
8 | 9 | | |
9 | | - | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
10 | 14 | | |
11 | 15 | | |
12 | 16 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
2 | | - | |
3 | 1 | | |
4 | | - | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
5 | 29 | | |
6 | 30 | | |
7 | 31 | | |
| |||
0 commit comments