12 个版本
0.7.3 | 2023 年 3 月 5 日 |
---|---|
0.7.2 | 2023 年 1 月 15 日 |
0.6.1 | 2022 年 2 月 12 日 |
0.6.0 | 2022 年 1 月 16 日 |
0.5.2 | 2021 年 6 月 20 日 |
#508 在 网络编程
每月 26 次下载
355KB
7.5K SLoC
哈库班
方便的数据对象共享库。
你是否厌倦了处理传播对象状态的所有小细节?计算差异、序列化、网络传播(超时、保活等)、尝试重新连接、负载均衡对象生产、事件传递、对象生命周期控制等。 哈库班为你做所有这些。
有关结构体、模块、Cargo 功能标志、事件处理等的详细信息,请参阅文档。
如果你觉得可能需要稍微不同的东西,这份文档的末尾有一份类似项目的列表。
特性
哈库班的一些特性和属性
- 当对象更改时,仅在网络上传播差异。默认情况下压缩。
- 自动处理连接丢失和恢复时的重新同步。
- 对象标识符是“丰富”的(json),不仅仅是字符串。因此,例如,可以以 json 表达的复杂用户定义的网页搜索过滤器,可以直接作为包含该搜索结果的搜索对象标识符。
- 对象可以属于零个或多个标签,这些标签作为暴露或观察未知对象的通配符。
- 支持树状网络拓扑,叶子节点对与其无关的内容一无所知。
- 所有级别的交换都可以观察和暴露,这与大多数以数据库/GraphQL为中心的解决方案不同。
- 每个对象最多选择一个暴露者以保持其更新。带有负载均衡。
- 线程安全的核心,使用流交付数据,使用接收器接收数据。
- 核心不受任何特定异步运行时的约束。首先实现的网络传输使用 tokio 上的 websockets。
- 允许使用自定义的序列化和反序列化程序,默认使用 serde。
- 可以编译成 .so,有 ruby 绑定(ffi),以及 wasm/js 绑定。
它不是为此目的而设计的,也不会做:消息传递、远程函数调用、同步“调用”(请求-响应)、允许显式目标寻址、作为工作队列、允许“消费”对象、直接与任何数据库交互、修改传输中的对象。
使用示例
let exchange = LocalExchange::builder().build();
let mut observe_contract = exchange.object((["some-tag"],"xxx")).observe();
let mut expose_contract = exchange.object((["some-tag"],"xxx")).expose();
tokio::spawn(async move {
//ExposeContract emits ObjectStateSink when first observer appears
let mut object_state_sink = expose_contract.next().await.unwrap();
let object_state = ObjectState::new("my data").json_serialize();
object_state_sink.send(object_state).await;
});
tokio::spawn(async move {
//ObserveContract emits ObjectStateStream when exposer uploads first ObjectState
let mut object_state_stream = observe_contract.next().await.unwrap();
let object_state = object_state_stream.next().await.unwrap().json_deserialize::<String>();
println!("{:?}", object_state.data);
});
查看更多示例,请访问 examples
目录,以及文档。
相关项目
Ruby 绑定
Hakuban Ruby ffi 绑定。
Wasm/JS 用于浏览器
Hakuban 编译为 wasm,并通过 JS 接口在浏览器中使用。
Hakuban Webapp 路由器
(待办事项:添加 URL)
Webapp 路由器,具有以下属性
- 每个链接都兼容在新标签页中打开,并且兼容复制链接
- 短 URL,可选地暴露选定的状态变量
- 所有 URL(即应用程序状态)都是可共享的
- 状态可以比 URL(只要它是渐进式构建的)大
- 即使离线/断开连接时也能正常工作(那时没有 URL 缩短)
Schedy
(待办事项:添加 URL)
任务队列/调度器。了解资源准备时间。资源由资源拥有者和任务所需资源组成图结构。
MechaTouch
商业(又称无耻宣传)机器人 UI 测试平台,具有视觉测试场景编程,完全远程 SUT 控制,零开销性能测量等。
路线图
未按优先级排序
- 预加载/侧加载
- 避免短时间断开连接时的对象闪烁
- 消息过滤器用于 auth* 和审计
- 对损坏/恶意差异具有免疫力
- 公开内省/统计对象
- 更高效和更简单的网络协议
- 保留未序列化的对象,并在需要时进行序列化
许可
在 MIT 许可证下分发。有关更多信息,请参阅 LICENSE
。
联系方式
要获取帮助,赞扬作者,嘲笑他人的问题,或只是四处闲逛观察进度 - 加入 hakuban 的 matrix 频道 #hakuban:matrix.org
如果您正在寻找更亲密的联系,请与 yunta
联系 - 在 matrix 上 @yunta:mikoton.com,或通过电子邮件 [email protected]。
类似项目
该列表不包括以更改或消息为中心的项目,也不包括集成数据库的项目。希望如此。实际上,弄清楚其中一些项目到底做什么是非常困难的
依赖项
约 7–22MB
约 327K SLoC