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 次下载

MIT 许可证

355KB
7.5K SLoC

Rust 6.5K SLoC // 0.1% comments CoffeeScript 590 SLoC // 0.0% comments Ruby 194 SLoC // 0.0% comments JavaScript 45 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