【发布时间】:2023-01-14 18:28:55
【问题描述】:
我有一个用 tauri(用于独立应用程序)和 rocket(用于网络版本)编写的应用程序。
该应用程序使用保存在内存中(基本上是内存数据库)的大型(-ish)文件,加载时间介于 1-10 秒之间,但我不希望该应用程序在打开之前阻塞该持续时间。
我的代码(火箭部分)目前看起来像这样:
#[rocket::get("/api/search?<searchTerm>&<take>&<skip>")]
pub fn search<'a>(
searchTerm: &str,
take: Option<u32>,
skip: Option<u32>,
db: &rocket::State<Database>
) -> Json<SearchResult>
{
Json(db.search(searchTerm, take, skip))
}
#[rocket::launch]
fn rocket() {
// ...
let db = Database::load().expect("Failed loading database");
rocket::build()
.mount("/", rocket::routes![search])
.manage(db);
}
我怎样才能异步运行 Database::load() ,而不阻止 rocket server/tauri 应用程序的启动,并且仍然能够在 search 中获取它?
【问题讨论】:
-
不,不幸的是,我认为 SharedFuture 根本没有按照我的想法去做。
-
我删除了问题的那一部分,我认为它主要分散了我实际尝试做的事情的注意力
-
不幸的是,在删除问题的那一部分时,您实际上删除了“问题”。您到底遇到了什么问题,遇到了什么错误? ;)
-
数据库基本上是一个巨大的 .xml.gz 文件,同步加载和解析它会使启动时间过长。
-
我的问题基本上是如何异步加载它,并且仍然将它注入我的端点
标签: rust rust-tokio rust-rocket tauri