2个版本
0.2.1 | 2022年5月16日 |
---|---|
0.2.0 | 2022年5月15日 |
0.1.1 |
|
0.1.0 |
|
#181 in WebSocket
31MB
1.5K SLoC
包含(WOFF字体,16KB) assets/stats/fonts/nucleo.woff,(WOFF字体,13KB) assets/stats/fonts/nucleo.woff2
Gun-rs
纯Rust实现的Gun.js。对于wasm版本,请查看gun-rs-wasm。
Iris-messenger 使用 gun-rs 节点 wss://gun-rs.iris.to/gun
为什么?
- Rust可以在许多平台上编译成高性能的原生二进制文件,包括嵌入式系统。
- 维护和为代码库做贡献比在Gun.js中更容易。Gun.js没有编译或压缩步骤,代码有点是手动压缩的 😄
使用
首先安装Rust。
Gun中继
cargo install gundb
gundb start
Gun库
use gundb::{Node, NodeConfig};
use gundb::types::GunValue;
let mut db = Node::new_with_config(NodeConfig {
outgoing_websocket_peers: vec!["wss://some-server-to-sync.with/gun".to_string()],
..NodeConfig::default()
});
let mut sub = db.get("greeting").on();
db.get("greeting").put("Hello World!".into());
if let GunValue::Text(str) = sub.recv().await.unwrap() {
assert_eq!(&str, "Hello World!");
}
状态
15/5/2022:
- Gun基本API
- 用于运行服务器的CLI
- 传入的WebSocket
- 传出的WebSocket(环境变量 PEERS=wss://some-server-url.herokuapp.com/gun)
- 组播(目前大小限制为65KB — 消息中的大照片无法通过它同步)
- 内存存储
- TLS支持(环境变量 CERT_PATH 和 KEY_PATH)
- 网络消息的高级去重
- 发布与订阅(只将网络消息中继到相关节点)
- 磁盘存储(sled.rs)
- 针对内容寻址数据的内容哈希验证(
db.get('#').get(data_hash).put(data)
) - 用户数据签名验证(
db.get('~' + pubkey).get('profile') ...
) - 加密与解密(通常在客户端的js中完成,如iris私密消息)
问题
- 多播不转发像Iris帖子带照片的大消息
开发
cargo install cargo-watch
RUST_LOG=debug cargo watch -x 'run -- start'
在Heroku上运行
heroku create --buildpack emk/rust
git push heroku master
或
依赖关系
~20–35MB
~658K SLoC