运行 Pingora 服务器
要运行一个 Pingora 应用,首先需要理解它的运行模型:
Pingora 是一个基于异步事件循环的 多线程网络服务框架,每个服务都是通过 Server 实例来管理。
基本启动方式
运行 Pingora 应用的最简形式如下:
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();
}
`
执行:
cargo run
即可启动一个默认配置的 HTTP 代理服务。
使用配置文件启动
Pingora 可以通过配置文件加载运行参数,比如监听端口、线程数、日志输出路径等。
配置文件示例:
[server]
bind = "0.0.0.0:8080"
threads = 4
log_level = "info"
[proxy]
upstream = "https://example.com"
然后在代码中指定配置文件路径:
let mut server = Server::new(Some("config.toml")).unwrap();
启动命令:
cargo run -- --config config.toml
日志与运行输出
默认情况下,Pingora 会在标准输出中打印运行日志,包含:
- 服务启动与端口绑定信息
- 请求统计
- 连接复用、TLS 握手状态
- 错误与警告日志
可以通过环境变量或配置项自定义日志等级:
RUST_LOG=pingora=debug cargo run
多线程与并发运行
Pingora 默认会根据 CPU 核心数自动分配工作线程。 你也可以在配置文件或代码中手动指定:
server.options.threads = 8;
💡 提示:Pingora 的线程模型与 Tokio 类似,采用多 Reactor + Worker 模式,能够充分利用多核 CPU 的性能优势。
服务停止与退出
按 Ctrl + C 即可优雅关闭服务。
更多关于安全关闭与平滑重启的内容,请阅读下一章:优雅重启与关闭
小结
- 运行 Pingora 应用只需三步:创建
Server→ 加载配置 → 启动服务; - 支持配置文件与命令行参数;
- 提供日志与线程管理功能;
- 后续章节将介绍如何平滑重启、配置守护进程等高级用法。
相关内容
- 高级主题 (WIP) 探索 Pingora 的高级特性,包括内部机制、异步运行时、线程模型和自定义扩展。
- 后台服务 学习如何在 Pingora 中配置和运行后台服务,包括定时任务、异步执行和守护进程管理。
- 异步上下文中的阻塞代码 学习如何在 Pingora 异步运行时中处理阻塞代码,确保高并发请求环境下的性能和稳定性。
- 构建 HTTP 代理 学习如何使用 Pingora 构建 HTTP 代理服务,包括基本请求转发、上游配置和自定义过滤器。
- 配置文件 了解 Pingora 的配置文件结构、主要参数及其作用,学习如何为不同场景编写高效、清晰的配置。
- 连接池与复用 学习如何在 Pingora 中使用连接池和连接复用,提高代理服务的性能和资源利用率。