#table #server #world #api #sqlite #egui #experiment

app world-tables-server

世界表格服务器

1 个不稳定版本

0.1.0 2023年2月18日

#71#experiment

MIT/Apache

3.5MB
1.5K SLoC

世界表格

这是一个实验,旨在实现一个使用 Axum 构建的 API 的 Egui 接口,使它们像单个应用程序一样协同工作。尽管目前仅限于单用户使用,但该项目在设计时考虑了未来的多用户应用。

屏幕截图

Main windows

Misc windows

备注

  • 迄今为止,仅在 Linux 上进行了测试。

  • 我不想在发送请求和等待 API 响应时阻塞 Egui 应用,但我看不出使用 tokio 的理由,在这种情况下,你无论如何都受限于用户按钮点击的速度。我只是使用普通的 std::thread 创建处理请求的线程,并通过通道将它们与主线程通信。

  • 由于我正在使用线程,我不知道该应用程序是否能在 wasm 上运行。它可能只需要使用 wasm_threadreqwasm 就可以工作。

  • 使用 Rust(rusqlite)和 Sqlite 的最佳使用方法(无论是多线程还是异步编程)似乎在人们之间存在争议,没有明确的共识或关于最佳方法的文档。我决定只使用带有 r2d2 的池管理器,但在这个测试中,我仍然没有正确使用 tokio::spawn_blocking。因此,API 的异步处理程序中的数据库调用仍然是阻塞的,这对这个应用程序来说不是什么大问题。

  • 我不想为数据库使用复杂的 ORM 设置,以便我能够更好地控制查询并稍后进行实验。因此,创建了一组简单的辅助特质,以保持代码组织,就像我正在使用 ORM 一样,并将它们拆分到 dbent 库中。

使用方法

此项目使用 cargo-make 进行构建和运行。要安装 cargo-make,请运行以下命令

cargo install cargo-make

安装后,您可以通过运行以下命令构建服务器和所有其他组件

cargo make server

请注意,这不仅可以构建组件,如果成功,还应运行带有 GUI 应用程序的服务器。第一次运行服务器时,SQLite 数据库将在用户目录中创建,可能需要一些时间才能完成。

资源

许可证

根据您选择的任何一种许可证进行授权:Apache许可证版本2.0MIT许可证

除非您明确声明,否则您提交给World-Tables的任何有意贡献,根据Apache-2.0许可证定义,应按上述方式进行双重授权,不附加任何额外条款或条件。

依赖项

~45MB
~753K SLoC