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 日

#942 in 网络编程

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

353 每月下载次数
用于 ecksport-rpc

MIT 许可证

105KB
2.5K SLoC

Ecksport

传输 -> xport -> ecksport

Ecksport 是一个低开销的多用途传输协议的又一迭代版本。

这是我尝试的这类想法的第三个版本,所以希望这次能做对。在它普遍可用之前,还有很多工作要做。

设计目标

Ecksport 对其设计有一定的看法,但对使用场景没有固定的看法。核心协议是一系列传输的帧,基于此我们构建了一个通道范式来复用独立的流。每个通道都是在“主题”的上下文中打开的,默认是双向的。连接的每一方都必须确认通道的关闭才能完全关闭它。

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

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

安全性

低级协议不假设加密系统,但我们有一些特殊消息用于实现身份验证。Ecksport 可以在 TLS(或其他可以传输其帧的东西)上使用,并继承其安全性。您还可以在 Noise 会话中使用它,将 Ecksport 帧放入 Noise 帧中 1:1。目标是支持通过 WebSocket 传输帧,因此它可以在 Wasm 上下文中使用。

详细信息

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

用途

Ecksport 旨在在 Aspect 消息协议中用作典型的客户端-服务器和服务器-服务器传输协议。请提交 PR 以添加使用它的应用程序!

项目结构

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

已知问题

  • 在流帧格式中糟糕地使用了 Borsh。这将在近期得到修复,并替换为真正不错的编码,同时提供一些辅助工具来帮助编写帧。
  • 许多缓冲参数不可配置,这将被公开。
  • 功能标志不足,你最好希望构建所有 Tokio 东西。
  • 没有第一方 TLS 帧器。

待办事项

  • 修复 Borsh 问题。
  • 支持 ClientBuilder 上的新方法,同时支持 native-tlsrustls,这样我们可以使用 TlsDomain 身份类型。
  • 清理 crate 导出。
  • ecksd 真正做到它所说的。
  • 可能需要一个阻塞的同步接口?

依赖项

约 5-15MB
约 165K SLoC