RTTP Proxy
为了避免对现存的应用服务器进行改造,可通过架设 RTTP Proxy 来实现 RTTP 协议的集成。
RTTP Proxy 是一个高性能的协议转换网关,它接收来自客户端的 RTTP 连接(基于 UDP),并将接收到的所有数据通过 TCP 转发给后端的应用服务器。这种方式允许开发者在不修改现有 TCP 服务代码的情况下,快速获得 RTTP 协议带来的弱网优化能力。
工作原理
RTTP Proxy 充当了客户端与应用服务器之间的桥梁:
- 客户端 通过 RTTP 协议连接到 RTTP Proxy。
- RTTP Proxy 接收到连接后,立即向 应用服务器 发起一个 TCP 连接。
- RTTP Proxy 在两个连接之间进行双向透传:
- 将 RTTP 接收到的数据解包并转发到 TCP。
- 将 TCP 接收到的数据打包并通过 RTTP 发送给客户端。
[客户端] <---- RTTP (UDP) ----> [RTTP Proxy] <---- TCP ----> [应用服务器]
主要特性
- 协议转换:透明地将可靠 UDP (RTTP) 转换为标准 TCP。
- 高性能:基于
libuv异步 I/O 框架构建,支持高并发连接。 - 零侵入:无需修改后端应用服务器代码,仅需简单的配置即可接入。
- 内置监控:提供 HTTP 监控接口,可实时查看连接状态、RTT 分布、丢包率等指标。
- Prometheus 支持:原生支持 Prometheus 指标导出,方便集成到现有的监控系统中。
使用方法
RTTP Proxy 是一个命令行工具,启动时需要指定本地监听地址、转发目标地址以及最大连接数。
启动命令
RttpProxyServer <local_host_ip> <local_port> <forward_host_ip> <forward_port> <max_connections> [http_monitor_port]
参数说明
| 参数 | 说明 | 示例 |
|---|---|---|
local_host_ip | RTTP 服务监听的本地 IP 地址。 | 0.0.0.0 |
local_port | RTTP 服务监听的 UDP 端口。 | 9000 |
forward_host_ip | 后端应用服务器的 TCP IP 地址。 | 127.0.0.1 |
forward_port | 后端应用服务器的 TCP 端口。 | 8080 |
max_connections | 允许的最大并发连接数。 | 3000 |
http_monitor_port | (可选) HTTP 监控服务的端口。默认为 local_port + 1000。 | 10000 |
示例
假设你的应用服务器运行在 127.0.0.1:8080,你希望在 9000 端口提供 RTTP 接入,并限制最大连接数为 3000:
./RttpProxyServer 0.0.0.0 9000 127.0.0.1 8080 3000 9001
监控与运维
RTTP Proxy 内置了 HTTP 监控服务器,默认端口为 RTTP 端口 + 1000。
监控接口
| 路径 | 说明 | 返回格式 |
|---|---|---|
/ | 监控主页,包含各功能链接。 | HTML |
/health | 健康检查接口,返回运行时间。 | JSON |
/ready | 就绪检查接口,确认是否正在接收连接。 | JSON |
/metrics | Prometheus 标准格式的指标数据。 | Plain Text |
/stats | 当前活跃连接的统计信息(RTT、丢包率分布)。 | HTML |
/connections | 当前所有活跃连接的详细列表。 | HTML |
/stats-history | 已关闭连接的历史统计信息(最近 100 个)。 | HTML |
Prometheus 指标
通过 /metrics 接口,你可以获取以下关键指标:
rttp_active_connections: 当前活跃连接数。rttp_total_connections: 自启动以来处理的总连接数。rttp_rtt_distribution_active: 活跃连接的 RTT 分布。rttp_loss_rate_distribution_active: 活跃连接的物理网络丢包率分布。
部署
RTTP Proxy 应部署在跟应用服务器同一机房的服务器上,以确保低延迟和高可用。
性能
RTTP Proxy的核心逻辑仅占用一个线程,对于类似网络游戏流量的高并发场景,能支持至少3000个并发连接并保持低延迟。如果需要充分利用多核服务器的性能,可启动多个实例。