5 个版本 (3 个破坏性更新)
0.4.1 | 2021年4月1日 |
---|---|
0.4.0 |
|
0.3.0 | 2021年2月11日 |
0.2.0 | 2021年1月13日 |
0.1.1 | 2020年12月18日 |
#753 在 异步
每月73次下载
在 7 个crate中使用 (6 个直接使用)
150KB
1.5K SLoC
Dialectic
dialectic (名词): 通过提出论题、发展对立的论题,并将它们结合起来形成一个连贯的合题的过程。
dialectic (crate): 异步Rust的传输多态会话类型。
当两个并发进程通信时,最好给它们的消息指定 类型,这样可以确保每个消息都是预期形式。
- 常规类型 仅描述可以通信的 有效内容。
- 会话类型 描述 何时可以通信 以及 如何通信。
此crate提供对几乎所有异步通道的泛型包装,通过编译时保证,确保任何使用该通道的代码都不会违反指定的 会话协议。这样的包装通道
- 在时间和内存方面几乎没有 运行时成本;
- 基于
async
/.await
构建,以允许与Rust强大的async
生态系统集成; - 优雅地处理运行时协议违规,不会引入 恐慌;
- 如果指定类型,允许进行 全双工并发通信,同时保留所有相同的会话类型安全性保证;
- 甚至可以实现 无上下文会话,这是一种比大多数其他会话类型库支持的会话类型更通用的形式。
这些功能使得Dialectic非常适合编写需要确保现实世界中 高可用性 和 复杂协议正确性属性 的网络服务,在这些服务中,协议可能会被违反,连接可能会断开。
Dialectic支持许多异步运行时和后端,如果您不想或不需要自己编写
dialectic-tokio-mpsc
库支持使用 Dialectic 通过 Tokio 的mpsc
队列在任务之间进行通信。dialectic-tokio-serde
库支持使用 Dialectic 在任何使用任何 TokioAsyncRead
/AsyncWrite
传输层编码的情况下进行通信。已实现了几种 Serde 格式,但很容易实现自己的格式。- 使用
bincode
进行序列化的dialectic-tokio-serde-bincode
后端。 - 使用
serde_json
进行序列化的dialectic-tokio-serde-json
后端。
- 使用
这些库也是编写您自己的后端的良好参考。
接下来做什么?
依赖关系
~3–5.5MB
~104K SLoC