P2P 联机大厅工作原理
核心技术:基于 FRP (Fast Reverse Proxy) 的 XTCP 模式实现 P2P 连接
系统组件
FRP 服务端 (frps)
FRP 客户端 (frpc)
中央服务器
游戏客户端
工作流程图
玩家A(房主) FRP服务端(frps) 玩家B(加入者)
┌──────────┐ ┌────────────┐ ┌──────────┐
│ 游戏客户端 │◄───────►│ frpc │◄─────────►│ frpc │◄───────►│ 游戏客户端 │
└──────────┘ └────────────┘ └──────────┘
│ │ │
└─────────────────────┼─────────────────────────┘
│
▼
┌──────────────┐
│ 中央服务器 │
│(房间管理) │
└──────────────┘
完整工作流程
1. 房主创建房间
1. 房主在客户端点击"创建房间"
2. 客户端自动启动 frpc,以 xtcp server 角色 连接到公网 frps
3. 客户端将房间信息发送到中央服务器存储
4. 中央服务器生成唯一房间ID,返回给房主
2. 其他玩家加入房间
1. 玩家在客户端看到房间列表(从中央服务器获取)
2. 点击"加入"房间后,客户端自动启动 frpc,以 xtcp visitor 角色 连接到公网 frps
3. 客户端使用房间的FRP密钥,通过 frps 与房主的 frpc 建立 P2P 连接
3. 游戏联机通信
1. 建立P2P连接后,玩家之间的游戏数据直接通过FRP隧道传输
2. frps 仅在初始连接阶段起协调作用,后续数据传输优先走P2P
3. Minecraft 客户端通过本地端口(默认25566)与 frpc 通信,实现"局域网"游戏效果
关键技术点
- XTCP模式:FRP的P2P模式,通过公网服务器打洞,实现客户端间的直接通信
- 自动调用:主程序根据操作系统自动选择对应平台的frpc
- 配置自动生成:客户端根据房间信息自动生成frpc配置文件
- 响应式设计:适配不同网络环境,优先使用P2P传输
优势:无需公网IP即可创建房间,数据传输优先走P2P降低服务器带宽压力,跨网络也能稳定联机