跳到主要内容

RTTP Proxy

为了避免对现存的应用服务器进行改造,可通过架设 RTTP Proxy 来实现 RTTP 协议的集成。

RTTP Proxy 是一个高性能的协议转换网关,它接收来自客户端的 RTTP 连接(基于 UDP),并将接收到的所有数据通过 TCP 转发给后端的应用服务器。这种方式允许开发者在不修改现有 TCP 服务代码的情况下,快速获得 RTTP 协议带来的弱网优化能力。

工作原理

RTTP Proxy 充当了客户端与应用服务器之间的桥梁:

  1. 客户端 通过 RTTP 协议连接到 RTTP Proxy。
  2. RTTP Proxy 接收到连接后,立即向 应用服务器 发起一个 TCP 连接。
  3. 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_ipRTTP 服务监听的本地 IP 地址。0.0.0.0
local_portRTTP 服务监听的 UDP 端口。9000
forward_host_ip后端应用服务器的 TCP IP 地址。127.0.0.1
forward_port后端应用服务器的 TCP 端口。8080
max_connections允许的最大并发连接数。3000
http_monitor_port(可选) HTTP 监控服务的端口。默认为 local_port + 100010000

示例

假设你的应用服务器运行在 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
/metricsPrometheus 标准格式的指标数据。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个并发连接并保持低延迟。如果需要充分利用多核服务器的性能,可启动多个实例。