6个版本

0.3.3 2024年8月22日
0.3.2 2024年8月21日
0.2.0 2024年8月9日
0.1.1 2024年8月1日

#1266网络编程

Download history 116/week @ 2024-07-31 111/week @ 2024-08-07 117/week @ 2024-08-14

344 每月下载量

MIT 许可证

155KB
3.5K SLoC

Ecksport

传输 -> xport -> ecksport

Ecksport是对一种低开销的多用途传输协议的又一迭代。

这是我尝试的此类想法的第三次迭代,所以我希望这次能做对。在它被普遍使用之前,还有很多工作要做。

设计目标

Ecksport对其设计有某些看法,但对用例没有看法。核心协议是一系列传输的帧,通过这些帧我们构建了一个通道范式以多路复用独立流。每个通道都在“主题”的上下文中打开,默认为双向。连接的每一方都必须确认通道的关闭以完全关闭它。

在此基础上,我们可以构建一些原语,并在不同的主题上并行使用它们

  • RPC调用/响应模式
  • 订阅
  • 消息接收器

安全性

低级协议不假设加密系统,但我们有一些特殊消息用于实现认证。Ecksport可以用于TLS(或任何其他可以传输其帧的系统),并且可以继承其安全性。您还可以在Noise会话中使用它,将Ecksport帧与Noise帧1:1匹配。我们的目标也是支持通过WebSockets传输帧,因此它可以在Wasm环境中使用。

细节

我们使用Borsh进行一些内部编码,但我们打算将其限制在最小范围内。完整的协议规范待定。

用途

Ecksport打算用于Aspect消息协议中,作为典型的客户端-服务器和服务器-服务器传输协议。提交一个PR来添加使用它的应用程序!

项目结构

  • ecksport-auth - 基于NaCl签名密钥系统的本地认证实现
  • ecksport-codec - 用于RPC服务器的可序列化类型的Trait定义
  • ecksport-core - 帧类型、特质、主题、错误代码等的定义
  • ecksport-net - 连接抽象、通道句柄等
  • ecksport-rpc - RPC协议定义
  • ecksd - 服务器到调度RPC调用到子进程等的服务器 [wip]
  • eckscat - 类似于netcat的命令行工具 [wip]

已知问题

  • 在流帧格式中对Borsh的糟糕使用。这将在不久的将来得到修复,并替换为一个真正不错的编码,同时还有一些帮助编写帧器的实用工具。
  • 许多缓冲参数不可配置,这将得到公开。
  • 功能标志不足,您可能希望构建所有Tokio相关的内容。
  • 没有第一方TLS帧。

待办事项

  • 修复Borsh问题。
  • 支持两种新的方法:native-tlsrustls,可以在ClientBuilder上使用,这样我们就可以使用TlsDomain身份类型。
  • 清理crate导出。
  • ecksd真正实现其功能。
  • 可能需要一个阻塞的同步接口?

依赖关系

约5-15MB
约167K SLoC