1个不稳定版本
0.1.0 | 2023年2月18日 |
---|
#2447 在 数据库接口
用于 3 crate
45KB
1K SLoC
世界表
这是一个实验,旨在使用Axum构建的API实现Egui接口,使它们像单个应用程序一样协同工作。虽然目前仅限于单用户使用,但这个项目是考虑到未来的多用户应用。
截图
备注
-
目前只在Linux上进行了测试。
-
我不想在发送请求并等待API时让Egui应用程序阻塞,但我看不出使用
tokio
的理由,因为在这种情况下,你无论如何都会受到用户按钮点击速度的限制。我只是使用普通的std::thread
创建处理请求的线程,并通过通道将它们与主线程通信。 -
由于我正在使用线程,我不知道该应用程序是否可以在wasm上运行。它可能只需要使用
wasm_thread
和reqwasm
即可运行。 -
使用Sqlite和rust (
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 许可证 2.0 版 或 MIT 许可证。
除非您明确声明,否则您提交给 World-Tables 的任何有意贡献,根据 Apache-2.0 许可证的定义,将按上述方式双重许可,不附加任何额外条款或条件。
依赖项
约 25MB
约 495K SLoC