ngrok-rust 项目教程
1. 项目的目录结构及介绍
ngrok-rust/
├── Cargo.toml
├── README.md
├── src/
│ ├── lib.rs
│ ├── online_tests.rs
│ └── ...
├── examples/
│ ├── basic_http.rs
│ ├── axum_example.rs
│ └── ...
└── tests/
└── ...
目录结构介绍
- Cargo.toml: 项目的依赖和元数据配置文件。
- README.md: 项目的基本介绍和使用说明。
- src/: 包含项目的核心代码,如
lib.rs
是库的入口文件,online_tests.rs
包含在线测试代码。 - examples/: 包含多个示例代码,如
basic_http.rs
和axum_example.rs
,展示了如何使用ngrok-rust
进行基本的 HTTP 服务和与axum
框架的集成。 - tests/: 包含项目的测试代码。
2. 项目的启动文件介绍
src/lib.rs
lib.rs
是 ngrok-rust
库的入口文件,定义了库的主要功能和结构。它包含了 ngrok
模块的初始化和主要功能的实现。
examples/basic_http.rs
basic_http.rs
是一个简单的示例,展示了如何使用 ngrok-rust
启动一个基本的 HTTP 服务。代码如下:
use ngrok::prelude::*;
use hyper::service::{make_service_fn, service_fn};
use hyper::{Body, Request, Response, Server};
use std::convert::Infallible;
async fn handle_request(_req: Request<Body>) -> Result<Response<Body>, Infallible> {
Ok(Response::new(Body::from("Hello, ngrok!")))
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let ngrok = ngrok::Session::builder()
.authtoken_from_env()
.connect()
.await?;
let tunnel = ngrok.http_endpoint().listen().await?;
let make_svc = make_service_fn(|_conn| {
async { Ok::<_, Infallible>(service_fn(handle_request)) }
});
let server = Server::builder(tunnel).serve(make_svc);
println!("Server running at: {}", tunnel.url());
server.await?;
Ok(())
}
examples/axum_example.rs
axum_example.rs
展示了如何将 ngrok-rust
与 axum
框架集成,启动一个基于 axum
的 HTTP 服务。
3. 项目的配置文件介绍
Cargo.toml
Cargo.toml
是 Rust 项目的依赖和元数据配置文件。它定义了项目的名称、版本、作者、依赖等信息。以下是 ngrok-rust
的 Cargo.toml
示例:
[package]
name = "ngrok-rust"
version = "0.13.1"
authors = ["Joel Hans <joel@ngrok.com>"]
edition = "2018"
[dependencies]
arc-swap = "1.5.1"
async-rustls = "0.3.0"
async-trait = "0.1.59"
awaitdrop = "0.1.1"
axum = "0.6.1"
base64 = "0.13.1"
bytes = "1.3.0"
futures = "0.3.25"
hostname = "0.3.1"
hyper = "0.14.23"
muxado = "0.4"
once_cell = "1.17.1"
parking_lot = "0.12.1"
regex = "1.7.3"
rustls-pemfile = "1.0.1"
serde = "1.0.149"
serde_json = "1.0.89"
thiserror = "1.0.37"
tokio = "1.23.0"
tokio-retry = "0.3.0"
tokio-util = "0.7.4"
tracing = "0.1.37"
[dev-dependencies]
anyhow = "1.0.66"
flate2 = "1.0.25"
paste = "1.0.11"
rand = "0.8.5"
reqwest = "0.11.13"
配置文件介绍
- [package]: 定义了项目的名称、版本、作者和 Rust 版本。
- [dependencies]: 列出了项目所需的所有依赖库及其版本。
- [dev-dependencies]: 列出了开发和测试所需的依赖库。
通过这些配置,ngrok-rust
项目能够正确地管理和使用其依赖库,确保项目的稳定性和功能性。