DEV Community

masterai-top
masterai-top

Posted on

德州扑克服务端架构解密:如何用 Unity + C++ 支撑万人并发

德州扑克服务端架构解密:如何用 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

tables_;
// 玩家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)