欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > 构建一个rust生产应用读书笔记三(代码改进)

构建一个rust生产应用读书笔记三(代码改进)

2025/2/26 1:57:41 来源:https://blog.csdn.net/fokman/article/details/144440414  浏览:    关键词:构建一个rust生产应用读书笔记三(代码改进)

为了确保测试能够在随机可用的端口上运行,我们需要对 zero2prod::run 函数进行一些修改,使其接受一个端口号作为参数。如果端口号未指定,可以选择一个随机可用的端口。这样可以避免端口冲突问题,确保测试的稳定性和并行性。

当然!我们可以使用 std::net::TcpListener 来绑定一个随机可用的端口,然后将这个 TcpListener 传递给 HttpServer,从而实现更灵活的端口管理。以下是优化后的代码

///! src/lib.rsuse std::net::TcpListener;use actix_web::dev::Server;
use actix_web::{web, App, HttpResponse, HttpServer, Responder};async fn health_check() -> impl Responder {HttpResponse::Ok().finish()
}pub fn run(listener: TcpListener) -> std::io::Result<Server> {let server = HttpServer::new(|| App::new().route("/health_check", web::get().to(health_check))).listen(listener)?.run();Ok(server)
}

run函数里面传入TcpListener,里面使用listen监听

/// ! tests/health_check.rs
use std::net::TcpListener;#[tokio::test]
async fn health_check_works() {let address = spawn_app();let client = reqwest::Client::new();let response = client.get(&format!("{}/health_check", &address)).send().await.expect("Failed to execute request.");assert!(response.status().is_success());assert_eq!(Some(0), response.content_length());
}fn spawn_app() -> String {let listener = TcpListener::bind("127.0.0.1:0").expect("Failed to bind random port");let port = listener.local_addr().unwrap().port();let server = zero2prod::run(listener).expect("Failed to bind address");let _ = tokio::spawn(server);format!("http://127.0.0.1:{}", port)
}

运行测试,OK,spawn_app 函数不需要使用异步调用,因此, async 关键字应该去掉,接下来即将开始学习开发邮件接收的第一个迭代了,先休息一下吧

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词