教程 pingora tutorial

运行 Pingora 服务器

要运行一个 Pingora 应用,首先需要理解它的运行模型:
Pingora 是一个基于异步事件循环的 多线程网络服务框架,每个服务都是通过 Server 实例来管理。

基本启动方式

运行 Pingora 应用的最简形式如下:

rust
use pingora::prelude::*;

#[tokio::main]
async fn main() {
    let mut server = Server::new(None).unwrap();
    server.bootstrap();
    let app = http_proxy_service(None);
    server.run_forever(app).unwrap();
}

`

执行:

bash
cargo run

即可启动一个默认配置的 HTTP 代理服务。

使用配置文件启动

Pingora 可以通过配置文件加载运行参数,比如监听端口、线程数、日志输出路径等。

配置文件示例:

toml
[server]
bind = "0.0.0.0:8080"
threads = 4
log_level = "info"

[proxy]
upstream = "https://example.com"

然后在代码中指定配置文件路径:

rust
let mut server = Server::new(Some("config.toml")).unwrap();

启动命令:

bash
cargo run -- --config config.toml

日志与运行输出

默认情况下,Pingora 会在标准输出中打印运行日志,包含:

  • 服务启动与端口绑定信息
  • 请求统计
  • 连接复用、TLS 握手状态
  • 错误与警告日志

可以通过环境变量或配置项自定义日志等级:

bash
RUST_LOG=pingora=debug cargo run

多线程与并发运行

Pingora 默认会根据 CPU 核心数自动分配工作线程。 你也可以在配置文件或代码中手动指定:

rust
server.options.threads = 8;

💡 提示:Pingora 的线程模型与 Tokio 类似,采用多 Reactor + Worker 模式,能够充分利用多核 CPU 的性能优势。

服务停止与退出

按 Ctrl + C 即可优雅关闭服务。 更多关于安全关闭与平滑重启的内容,请阅读下一章:优雅重启与关闭

小结

  • 运行 Pingora 应用只需三步:创建 Server → 加载配置 → 启动服务;
  • 支持配置文件与命令行参数;
  • 提供日志与线程管理功能;
  • 后续章节将介绍如何平滑重启、配置守护进程等高级用法。