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 在 网络编程
344 每月下载量
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-tls
和rustls
,可以在ClientBuilder
上使用,这样我们就可以使用TlsDomain
身份类型。 - 清理crate导出。
- 让
ecksd
真正实现其功能。 - 可能需要一个阻塞的同步接口?
依赖关系
约5-15MB
约167K SLoC