gpt4 book ai didi

rust - 将 actix-web 嵌入到结构中,以便我可以启动/停止服务器

转载 作者:行者123 更新时间:2023-11-29 08:29:16 24 4
gpt4 key购买 nike

我正在努力将 actix-web 嵌入到绑定(bind)库中。我想申报 HttpServer在结构中,以便我可以轻松调用 .start().system_exit() .来 self 对 the source code 的非常基本的阅读它已经实现为具有两个依赖项的结构:<H, F> .它还带有一个工厂来实例化自己。

如果我理解正确,那么我将不得不实现 HttpServer作为我的新结构中的依赖项,并在其中添加我自己的特征。我之前的想法是创建一个新结构并声明 HttpServer作为其中的一个属性。对于需要在其中声明的泛型,这似乎很麻烦。

到目前为止我想出的是:

struct CustomServer<T> {
srv: T,
}

impl<T> CustomServer<T>
where
T: HttpServer,
{
fn init() {
self.srv = HttpServer::new(|| App /* etc. */)
}
}

我不确定我是在捕获救命稻草还是在正确的方向。

问题是:我应该/可以如何着手定义一个具有 HttpServer 的结构及其在我的结构中可访问的功能?

最佳答案

HttpServer 是一个 generic struct , 不是 trait (所以“T: HttpServer”没有意义)。

您可以创建一个包含 HttpServer 的完全任意实例化的通用结构(这对您来说可能不是很有用):

struct CustomServer<H: IntoHttpHandler + 'static, F: Fn() -> H + Send + Clone + 'static> {
srv: HttpServer<H, F>,
}

impl<H: IntoHttpHandler + 'static, F: Fn() -> H + Send + Clone + 'static> CustomServer<H, F> {
fn new(factory: F) -> CustomServer<H, F> {
CustomServer {
srv: HttpServer::new(factory),
}
}
}

或包含特定类型 HttpServer 的具体结构(我猜这就是您想要的,尽管如果没有您的用例的详细信息很难说):

struct CustomServer {
srv: HttpServer<App, fn() -> App>,
}

impl CustomServer {
fn new() -> CustomServer {
CustomServer {
srv: HttpServer::new(|| App),
}
}
}

两者之间也有很多点(例如,专门化 H 而不是 F,或者根据其他通用参数稍微专门化),具体取决于您要尝试的内容做。

关于rust - 将 actix-web 嵌入到结构中,以便我可以启动/停止服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54208702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com