#document #crdt #p2p #peer #central #authority #writers

peermerge

使用P2P协议,无中心权威地管理多个编写者共用的JSON-like文档

3个版本

0.0.3 2023年10月28日
0.0.2 2023年10月22日
0.0.1 2023年10月19日

#862 in 异步

AGPL-3.0-only

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进行浏览器支持,并使用tokioasync-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通过transacttransact_mut方法公开了automerge的AutoCommit完整接口,分别用于读取和写入。

通过[AsyncRead]/[AsyncWrite]支持的[FeedProtocol]连接到对等节点,传递到connect_protocol_diskconnect_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