1 个不稳定版本
0.1.0 | 2023年2月18日 |
---|
#2783 在 数据库接口
135KB
2.5K SLoC
World Tables
这是一个实现使用 Axum 构建的 API 的 Egui 接口的实验,使它们像一个单一应用程序一样协同工作。尽管目前仅限于单用户使用,但这个项目是在考虑未来的多用户应用程序的情况下制作的。
截图
注释
-
迄今为止仅在 Linux 上进行了测试。
-
我不希望 Egui 应用在发送请求并等待 API 时被阻塞,但我没有理由像在这种情况下使用
tokio
一样使用它,因为在这种情况下,你无论如何都受限于用户的按钮点击速度。我只是使用普通的std::thread
来创建处理请求的线程,并通过通道将它们与主线程通信。 -
由于我使用了线程,我不知道该应用程序是否在 wasm 上工作。它可能只需要使用
wasm_thread
和reqwasm
就可以工作。 -
使用 Rust 的 Sqlite (
rusqlite
) 和使用多线程或异步编程的最佳方法似乎是人们之间争论的话题,没有明确的共识或关于最佳方法的文档。我决定只使用带有r2d2
的池管理器,但在这次测试中,我仍然没有正确使用tokio::spawn_blocking
。因此,API 的异步处理程序中的数据库调用仍然会阻塞,这对这个应用程序来说不是什么大问题。 -
我不想使用复杂的 ORM 设置来处理数据库,这样我就可以更多地控制查询,并在以后进行实验。相反,我创建了一系列简单的辅助特质,以便仍然像使用 ORM 一样组织代码,并将它们分成
dbent
库。
使用方法
此项目使用 cargo-make 进行构建和运行。要安装 cargo-make,请运行以下命令
cargo install cargo-make
安装后,您可以通过运行以下命令来构建服务器和所有其他组件
cargo make server
请注意,这将不仅构建组件,如果成功,还应该运行带 GUI 应用程序的服务器。第一次运行服务器时,SQLite 数据库将在用户目录中创建,可能需要一些时间才能完成。
资源
-
国家-州-城市数据库 - 通过额外处理创建附加表和关系的源数据。
-
Catppuccin/egui - 为 egui 提供的酷炫 Frappé 主题,包含一些个人定制。
许可
您可以选择在 Apache License, Version 2.0 或 MIT License 下进行许可。
除非您明确表示,否则您提交给 World-Tables 的任何有意包含的贡献,根据 Apache-2.0 许可证定义,应如上双许可,没有任何附加条款或条件。
依赖项
~33–52MB
~1M SLoC