2 个版本

0.1.3 2020 年 11 月 13 日
0.1.2 2020 年 10 月 29 日

#2046异步

MIT/Apache

220KB
3K SLoC

D3 -- 服务器开发框架

Build Status Test Status License Cargo Documentation Rust 1.47+

此 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 以查看带有服务的服务器示例。

服务

应用程序

使用方法

将以下内容添加到您的 Cargo.toml

[dependencies]
d3 = "0.1.3"

兼容性

d3 支持至少六个月前的稳定 Rust 版本,并且每次增加最低支持的 Rust 版本时,都会发布一个新的次要版本。目前,最低支持的 Rust 版本是 1.47。

贡献

d3 欢迎来自每个人的贡献,形式包括建议、错误报告、拉取请求和反馈。💛

如果您需要贡献的想法,有几种方法可以开始

学习资源

如果您想了解更多,请阅读我们的 wiki

行为准则

d3 项目遵守 Rust 行为准则。这描述了所有贡献者应遵守的最小行为。

许可证

根据您的选择,许可为以下之一

贡献

除非您明确声明,否则您有意提交以包含在作品中的任何贡献,根据 Apache-2.0 许可证定义,应按上述方式双重许可,不附加任何额外条款或条件。

依赖关系

~6–15MB
~180K SLoC