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

news/2024/12/18 19:53:56/

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

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

rust">///! 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监听

rust">/// ! 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 关键字应该去掉,接下来即将开始学习开发邮件接收的第一个迭代了,先休息一下吧


http://www.ppmy.cn/news/1556192.html

相关文章

Java 项目拼音工具类,用于将汉字转为拼音,并处理了常见的多音字问题

Java 项目拼音工具类&#xff0c;用于将汉字转为拼音&#xff0c;并处理了常见的多音字问题。 该工具类使用的依赖&#xff1a; <dependency><groupId>com.belerweb</groupId><artifactId>pinyin4j</artifactId><version>2.5.0</versi…

Python网络爬虫技术详解与实战案例

Python网络爬虫技术详解与实战案例 引言 网络爬虫(Web Crawler)是一种自动化程序,用于在互联网上收集数据。通过向网页发送HTTP请求,获取网页数据,然后提取和分析网页内容,网络爬虫能够实现数据收集、信息提取和数据分析等多种应用场景。Python作为一种功能强大且易于…

安防监控Liveweb视频汇聚融合平台助力执法记录仪高效使用

Liveweb平台可接入的设备除了常见的智能分析网关与摄像头以外 &#xff0c;还可通过GB28181协议接入执法记录仪&#xff0c;实现对执法过程的全程监控与录像&#xff0c;并对执法轨迹与路径进行调阅回看。那么&#xff0c;如何做到执法记录仪高效使用呢&#xff1f; 由于执法记…

python 配置 oracle instant client

1.问题描述 想用python连接oracle数据库&#xff0c;百度得知需要cx_Oracle这个第三方库 import cx_Oracle# 设置Oracle数据源名称 dsn cx_Oracle.makedsn(host, port, service_nameservice_name)# 创建数据库连接 connection cx_Oracle.connect(userusername, passwordpas…

【innodb阅读笔记】之 行格式(Dynamic)

一、背景 Innodb 1.0 版本开始引入了新的行格式 dynamic&#xff0c;新的行格式在存放 blob 中的数据采用了完全行溢出的方式&#xff0c;在数据页中只存放 20 字节的指针&#xff0c;实际数据都存放在 Off page 中&#xff0c;而 compact 会存放 768 个前缀字节。 二、dynami…

React 入门:JSX语法详解

简介 React是一个用于构建用户界面的JavaScript库&#xff0c;它引入了JSX语法&#xff0c;使得你可以在JavaScript代码中编写类似HTML的结构。JSX在编译后会被转换成合法的JavaScript对象。 JSX基础 JSX是一种看起来像HTML的JavaScript语法扩展。它并不直接被浏览器执行&am…

java程序语言设计-反射加设计模式

第六章:反射设计模式 一、反射 1. 反射(Reflection):允许在程序运行状态中&#xff0c;可以获取任意类中的属性和方法&#xff0c;并且可以操作任意对象内部的属 性和方法&#xff0c;这种动态获取类的信息及动态操作对象的属性和方法对应的机制称为反射机制。 2. 类对象 和 类…

Crawl4AI:一个为大型语言模型(LLM)和AI应用设计的网页爬虫和数据提取工具实战

这里写目录标题 一、crawl4AI功能及简介1、简介2、特性 二、项目地址三、环境安装四、大模型申请五、代码示例1.生成markdown2.结构化数据 一、crawl4AI功能及简介 1、简介 Crawl4AI 是一个开源的网页爬虫和数据抓取工具&#xff0c;一个python项目&#xff0c;主要为大型语言…