36 lines
1.2 KiB
Markdown
36 lines
1.2 KiB
Markdown
|
|
## Quick Example of Syncing Automerge Docs via Redis
|
|
|
|
The good:
|
|
1. store the document in redis as both a compacted document save and as individual changes
|
|
2. able to load the the saved document, and then calculate which changes are missing in a single pass
|
|
3. uses redis (RPUSH) to get global change ordering
|
|
4. wake all clients on new changes with redis (PUBLISH, SUBSCRIBE)
|
|
5. elect (via SETNX) a single leader to saveIncremental() every 10 seconds
|
|
6. said node also does a full doc save when incremental bytes are 10x the base save
|
|
7. detects disconnection of the leader (via EXPIRE) and elects a new leader
|
|
8. detects when a document has not been created and elects a single node to create it
|
|
|
|
The bad:
|
|
1. redis can do binary data - i couldnt figure it out - i hex encode/decode everything
|
|
2. there's probably a few race conditions i need to find
|
|
3. my typescript is ass
|
|
4. not much in the way of error handling
|
|
5. should really be using applyPatches() but im not
|
|
6. the api is a little funny
|
|
|
|
How to use:
|
|
|
|
```
|
|
$ yarn
|
|
$ yarn build
|
|
```
|
|
|
|
Then run
|
|
|
|
```
|
|
$ node client.js $DOCID
|
|
```
|
|
|
|
In two or three different windows and watch each client editing the same document.
|
|
|