德州扑克服务端架构解密:如何用 Unity + C++ 支撑万人并发
一套开源的高性能德州扑克完整解决方案,客户端 Unity + 服务端 C++,支持俱乐部、代理联盟、MTT/SNG 锦标赛。
写在前面
我见过很多德州扑克的技术教程,但绝大多数都是「单机版」或「Demo级别」:
牌型判定写得啰嗦又慢
服务端是单线程阻塞模型
根本没有考虑高并发场景
没法支撑俱乐部、联盟这种多房间业务
于是我自己动手,从零开发了一套可上线的德州扑克完整方案。
今天把这套架构的核心设计分享出来,希望能给想做棋牌后端的同学一些参考。
开源地址会在文末给出,源码完全可下载。
一、为什么选 Unity + C++?
客户端:Unity
一套代码打包 Windows / macOS / iOS / Android
UI 框架成熟,动画、特效开发效率高
C# 写业务逻辑,通过 P/Invoke 调 C++ 底层
服务端:C++
棋牌类游戏对并发要求高,C++ 是最稳的选择:
没有 GC 暂停,响应时间可控
内存精细管理(对象池、内存池)
生态成熟:网络库、序列化库、压测工具都很完善
通信方式
客户端与服务端之间用 自定义 TCP 协议 + Protobuf:
TCP 保证可靠有序传输
Protobuf 做序列化,跨语言、前后端共用协议定义
二、整体架构(一图看懂)
text
[Unity 客户端]
│
│ (TCP/WebSocket)
▼
[网关层] → [登录/房间/路由服务]
│
▼
[游戏逻辑服务器] ←→ [Redis(玩家状态/房间快照)]
│
▼
[MySQL](持久化数据:用户、战绩、俱乐部)
网关层:管理长连接,协议解析,简单的防攻击
逻辑服务器:核心玩法、牌局计算、筹码变动
Redis:房间状态热数据、玩家在线状态、分布式锁
MySQL:账号、战绩、俱乐部成员等落盘数据
这套架构下,逻辑服务器可以水平扩展,加机器就能抗更高并发。
三、房间管理——高并发的核心
德州扑克的业务特点:
一桌 2~9 人
每桌独立状态机
大量桌子同时进行(俱乐部模式可能有几千桌)
我用的方案:单线程事件循环 + 分 Table 对象
cpp
class TableManager {
// 预分配 10000 个 Table 对象,避免运行期 new/delete
std::vector
// 玩家ID -> TableID 映射
std::unordered_map playerToTable_;
};
一个逻辑线程里跑 epoll 事件循环
收到玩家消息后,直接找到对应的 Table 对象处理
没有锁竞争(单线程),性能极高
实测单机(8核16G)可支撑 8000 桌 + 5万在线,延迟 P99 < 30ms。
四、牌型判定——性能硬指标
德州扑克的核心性能热点是 7 张牌选 5 张的最佳牌型判定。
如果用暴力枚举 C(7,5)=21 种组合,再逐个比较,速度太慢。
我用的方法:查表法 + 质数映射
思路:
给每张牌映射一个唯一质数(2,3,5,7,11...)
5 张牌的乘积得到一个唯一值
用这个值查一张预计算好的 rank 表,直接得到牌力等级
伪代码:
cpp
uint32_t evaluate(uint64_t cards) {
uint32_t product = 1;
for each card in cards:
product *= prime[card];
return rankTable[product];
}
单次判定 < 0.5 微秒
一局牌只判定 1~2 次(Showdown 时)
对整体性能几乎没有影响
完整的牌型映射表代码在 GitHub 仓库里。
五、防作弊与公平性
棋牌项目最敏感的就是公平性,我做了这几层保障:
层级 措施
发牌 服务端绝对随机源(std::random_device + 时间种子),客户端只接收结果
牌型计算 全在服务端完成,客户端只做展示
行为校验 每个请求都检查:是否轮到此玩家、筹码是否足够、动作是否合法
日志审计 每局所有操作落 MySQL,可回放对账
可选 支持接入第三方随机数认证服务(如 Random.org)
没有绝对的安全,但能大幅提高作弊门槛。
六、性能实测数据
测试环境:AWS c5.4xlarge(16 vCPU / 32GB)
指标 数据
单机最大同时桌数 8000 桌
单机最大同时在线 5~6 万人
平均网络延迟 < 10ms(同区域)
P99 延迟 < 30ms
单桌带宽消耗 < 5KB/s
压测脚本也在 GitHub 仓库里,可以自己跑。
七、这个开源项目包含什么?
我把整套方案开源了,仓库里有的:
✅ Unity 客户端完整工程
✅ C++ 服务端源码(CMake 构建)
✅ Protobuf 协议定义
✅ MySQL / Redis 表结构
✅ Docker 一键部署脚本
✅ 压测工具
✅ 部分架构设计文档
你 clone 下来,改配置就能跑起来。
八、适用场景
这套代码适合:
想学习棋牌后端架构的开发者
需要快速搭建德州扑克 MVP 的创业团队
做俱乐部 / 联盟 / 锦标赛模式的商业项目
用于技术研究、教学案例
⚠️ 合规提示:源码仅供技术学习,使用请遵守当地法律法规。
写在最后
做这个项目花了不少时间,把核心架构和关键实现分享出来,希望能帮到正在做或准备做棋牌后端的朋友。
如果觉得对你有帮助:
👉 GitHub 地址(复制到浏览器打开):
https://github.com/masterai-top/TexasHoldem-Poker-Complete-Solution
⭐ 如果能点个 Star 支持一下,我会很开心,也方便其他开发者找到这个项目。
有问题欢迎在 GitHub 上提 Issue,评论区不一定能及时回复。
Top comments (0)