抛弃传统Web容器!我用 Java21 + Netty 手搓了一个高并发对战游戏网关

0 阅读4分钟

大家好,我是HuiZhou12(你们可以叫我老周)。最近我突发奇想,想做一款带有RPG技能体系、赛博朋克/硬科幻画风的“战术五子棋” 。 起初,我以为这只是个简单的WebSocket玩具项目。但随着开发的深入,我的“架构强迫症”发作了,为了保证哪怕在弱网环境下也能有极致的对战体验,我推翻了内存单机架构,直接上了一套分布式高并发架构

现在核心闭环(登录->匹配->对战->断线重连->结算->返回大厅)已经全部跑通。即使有ai大模型进行辅助,但一个人肝全栈,还是撑不住,太累了!所以现在准备开源,希望能在这里找到志同道合的伙伴一起把这个项目做大!

视觉尝鲜

用户登录界面

登录界面.gif

赛博朋克风的匹配雷达按钮

匹配界面.gif

匹配成功

匹配成功.gif

下棋时的混合渲染特效

特效.gif

断线重连时的“琥珀色警戒”

用户掉线.gif

注意!这不是一个普通的五子棋

想必从上面的效果图可以看到,本项目并非传统五子棋实现,而是在经典规则基础上引入了多类型棋子、技能机制、冷却时间与局部博弈判定

为了配得上前端的视觉表现以及不一样的游戏机制,后端的基建我一点也没含糊。核心技术栈基于 Java 21 + Netty + Redis

  • 高并发通信架构 (主从 Reactor) :抛弃了传统的 Web 容器,基于 Netty 构建了主从 Reactor 线程模型。严格区分了 IO 线程与业务线程职责,绝对不让 EventLoop 阻塞,轻松应对高并发 WebSocket 握手与长连接场景。(咳咳,大马拉小车)
  • 极客级的协议传输 (Protobuf) :全面弃用 JSON,采用 Google Protobuf 自定义二进制协议。不仅彻底解决了 TCP 粘包/拆包问题,还极大地压缩了网络载荷,让弱网环境下的传输犹如德芙纵享丝滑。
  • 无状态分布式网关:通过 Redis + Redisson 集中管理用户会话、房间状态与对局生命周期。网关层完全无状态,意味着这个游戏后端可以随时多实例部署、横向扩展。
  • 状态机 (FSM) 与绝对一致性:对局状态流转全部交由有限状态机严格控制。结合 Redisson Delayed Queue 实现“回合超时自动落子”与“断线判负”,就算玩家拔网线,对战逻辑依然具备最终一致性,杜绝前端参与计算!

压测炼狱!我们用数据说话

我不喜欢光说不练。在核心路径完工后,我用 Apache JMeter (CLI Mode) 在单机与云服务器环境下进行了地狱级的并发与稳定性验证:

HTTP 登录接口高并发无缝衔接 WebSocket Upgrade。 模拟连接风暴下的瞬时建连。 长连接保持与异常断连处理测试。

结果:在极限弱网和高并发条件下,实现 0 报错、无连接泄漏,并成功定位并解决了几个隐藏的性能瓶颈。当然这也只是我的其中一个测试结果,相关压测大家可以前往我的github仓库进行查看。(由于我用的是办公本,性能压则仅供参考哈)

最后,我需要各位大佬(抱腿)!

这个项目的底座已经打下(其实还有很多bug),但我一个人的精力确实到了极限(前端和后端的逻辑快把我搞精分了)。 项目目前已经开源 附上 GitHub 链接,我诚挚邀请各位大佬加入:

前端特种兵 (Vue 3 / CSS 特效)

我受够了前端 AI 生成的臃肿代码,我要的是极致的控制力。

如果你热衷于打磨 UI 质感、写酷炫的 CSS 动画,或者想尝试 Canvas+DOM 混合渲染,这里有绝佳的舞台。

目前亟待开发:排行榜、个人界面、好友系统、更酷炫的技能特效。

后端架构师 (Java / Netty / Redis)

万物皆对象,唯有架构永恒。

如果你对分布式系统、网络编程感兴趣,想拿一个硬核的实战项目练手或者写进简历。

目前亟待优化:心跳机制调优、匹配匹配算法设计(这个我是真的不会写啊!)。

游戏策划/数值体验官

平衡,是一门杀人的艺术。

懂得平衡游戏性,设计技能体系(比如:弓箭手冷却几回合合适?)。能否让这款棋类游戏真正具备 RPG 的深度,就靠你了!

后端特种兵(Java / Netty / Redis)

没有解决不了的 Bug,只有不够极致的优化。

只需要关心快、更林、最快。如果你看到 EventLoop 被阻塞会感到生理不适,如果觉得 100ms 的延迟是对玩家的羞辱,加入我吧!。

目前亟待开发:数据库开发、好友系统、段位计算逻辑、胜负判定优化。

加入方式: 在 GitHub 提 Issue,或者在评论区留言/私信我。哪怕只是来点个 Star,或者 Clone 下来把玩一下,也是对我莫大的鼓励!