3个版本
0.0.3 | 2023年10月28日 |
---|---|
0.0.2 | 2023年10月22日 |
0.0.1 | 2023年10月19日 |
#862 in 异步
505KB
12K SLoC
Peermerge
使用P2P协议,无中心权威地管理多个编写者共用的JSON-like文档的底层API。
状态
预_alpha
许可证
AGPLv3
lib.rs
:
简介
Peermerge是一个Rust crate,用于管理无中心权威的多编写者JSON-like文档。通过automerge的CRDT实现实现并发写入,并通过hypercore-protocol进行对等体之间的通信。计划在将来支持p2panda和其他对等体协议,而不是hypercore。
Peermerge可以使用WASM进行浏览器支持,并使用tokio
或async-std
运行时。
此crate公开了一个底层API,以下crate的同一系列使用
- peermerge-tcp:到现有peermerge的TCP/IP绑定
- peermerge-hub:可配置的(tokio)运行器,使用peermerge-tcp托管代理peermerge,并添加备份和日志记录
- peermerge-server:基于peermerge-hub的可配置axum网络服务器,它添加了WebSocket绑定和静态HTML文件服务
设计
主要抽象是[Peermerge],它是一个存储文档的仓库。对于单个对等体(设备或服务器)通常不需要创建和/或打开多个Peermerge实例。
Peermerge设计得可以轻松克隆并发送到派生的线程,其中的数据可以存储在内存中或磁盘中。磁盘存储更为常见,但内存存储也可以在例如WASM构建中很有用,其中对等体(即浏览器)没有文件系统。(要防止每次浏览器刷新时都创建新的对等体,请参阅reattach_secrets
。)
Peermerge通过transact和transact_mut方法公开了automerge的AutoCommit完整接口,分别用于读取和写入。
通过[AsyncRead]/[AsyncWrite]支持的[FeedProtocol]连接到对等节点,传递到connect_protocol_disk或connect_protocol_memory。
功能
hypercore-feed
(默认,必需)
与未来兼容的当前必需功能,用于使用hypercore feed。
tokio-runtime
(默认)
默认使用tokio运行时。必需选择此选项或async-std-runtime
。
async-std-runtime
使用async-std运行时。必需选择此选项或tokio-runtime
。
wasm-bindgen
(默认)
启用对WASM编译和运行时的支持。
log
启用对[tracing]中的log的支持。
channel-writer
导出一个方便的ChannelWriter
包装器以及bytes包。
示例
待办事项
另请参阅
Peermerge深受原始JavaScript hypermerge包的启发,该包针对现已过时的hypercore和automerge版本。
依赖关系
~8–25MB
~352K SLoC