2 个版本
0.1.3 | 2020 年 11 月 13 日 |
---|---|
0.1.2 | 2020 年 10 月 29 日 |
#2046 在 异步
220KB
3K SLoC
D3 -- 服务器开发框架
此 crate 提供了一个服务器开发的框架。它特别适合服务器采用管道架构的情况。
有两个核心概念:机器和指令集。结合通道发送器和接收器,你就有构建服务器的所有必要部分。严格来说,d3 框架可以用于非服务器项目,任何你有并发、协作对象实例的地方。
指令集
指令集从任何类型的 enum 开始。当从 MachineImpl
派生时,它成为一个指令集。
机器
机器是任何结构的实例,实现了一个或多个指令集,并连接到集体。机器异步地通过它们实现的指令集相互通信。
示例
此示例展示了创建指令集、创建机器并向该机器发送指令是多么简单。
// A trivial instruction set
#[derive(Debug, MachineImpl)]
enum StateTable { Init, Start, Stop }
// A trivial Alice
pub struct Alice {}
// Implement the Machine trait for Alice
impl Machine<StateTable> for Alice {
fn receive(&self, cmd: StateTable) {
}
}
// create the Machine from Alice, getting back a machine and Sender<StateTable>.
let (alice, sender) = executor::connect(Alice{});
// send a command to Alice
// Alice's receive method will be invoked, with cmd of StateTable::Init.
sender.send(StateTable::Init).expect("send failed");
Crates
主要的 d3
crate 只是 重新导出 来自较小的子 crate 的工具。
d3-derive
MachineImpl
,一个用于将 enum 转换为 d3 指令集的 derive 宏。
d3-core
machine_impl
,一个用于与 #[derive(MachineImpl)] 一起使用的打包命名空间。executor
,一个用于与集体交互的打包命名空间。
d3-components
components
,一个用于管理机器的打包命名空间。它基于组件、协调器、连接器模型。network
,机器可消费的 TCP 抽象。它包装了 Mio。
示例
提供了许多示例。克隆 d3 仓库并使用以下命令运行示例服务器:cargo run -p test-server --release
以查看带有服务的服务器示例。
服务
echo 服务
,一个 TCP 回显服务的示例udp 回显服务
,一个 UDP 回显服务的示例聊天服务
,一个 TCP 聊天服务的示例alice 服务
,一个具有表单操作功能的 HTTP 服务的示例监控服务
,一个监控核心的示例
应用程序
测试服务器
,一个提供服务的可配置服务器示例Conway's 生命游戏
,一个具有 UI 和交互机器的游戏示例
使用方法
将以下内容添加到您的 Cargo.toml
[dependencies]
d3 = "0.1.3"
兼容性
d3 支持至少六个月前的稳定 Rust 版本,并且每次增加最低支持的 Rust 版本时,都会发布一个新的次要版本。目前,最低支持的 Rust 版本是 1.47。
贡献
d3 欢迎来自每个人的贡献,形式包括建议、错误报告、拉取请求和反馈。💛
如果您需要贡献的想法,有几种方法可以开始
- 发现错误或有功能请求? 提交问题!
- 带有 feedback wanted 标签的问题和 PR
- 带有 good first issue 标签的问题是相对容易的开始问题。
学习资源
如果您想了解更多,请阅读我们的 wiki
行为准则
d3 项目遵守 Rust 行为准则。这描述了所有贡献者应遵守的最小行为。
许可证
根据您的选择,许可为以下之一
- Apache 许可证 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
贡献
除非您明确声明,否则您有意提交以包含在作品中的任何贡献,根据 Apache-2.0 许可证定义,应按上述方式双重许可,不附加任何额外条款或条件。
依赖关系
~6–15MB
~180K SLoC