这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
《游戏服务端编程实践》4.4.2 JWT 生成与校验
在 4.2.2 的 JWT 结构之上补登录服需要的工程细节:多 kid 密钥轮换、claims 设计、校验中间件与 net/http 接入,明确过期与伪造的分支差异,并用 httptest 覆盖篡改、过期、未知 kid 和会话版本失效等场景。
posts
这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
在 4.2.2 的 JWT 结构之上补登录服需要的工程细节:多 kid 密钥轮换、claims 设计、校验中间件与 net/http 接入,明确过期与伪造的分支差异,并用 httptest 覆盖篡改、过期、未知 kid 和会话版本失效等场景。
从登录服的五个对外接口出发,给出请求、响应包络与业务错误码的统一设计,并落到可运行的 net/http 处理器:覆盖幂等重试、请求体大小限制、参数校验与错误脱敏,附 httptest 用例,帮助读者搭起可演进、可观测的登录 API 骨架与排障线索。
围绕一个游戏账号绑定多个渠道的完整生命周期,拆解绑定表唯一约束、首次登录自动建号与强制绑定的取舍、跨账号冲突与同一设备切换账号的处理,以及解绑冷却、保留最后登录方式和注销释放 external_id 的策略,并给出可运行的 Go BindingStore 与冲突测试。
从信任边界出发,拆解客户端 SDK 返回值里哪些只是线索、哪些必须由服务端复核,给出授权码换票、票据验签与渠道回调三类验证的实现要点,并用可运行的 Go Verifier、内存 nonce 缓存以及重放、过期、伪造签名测试,说明弱网幂等与日志落库的最小纪律。
从微信、Steam、Google 三条授权链路出发,拆解移动端授权码、OpenID 2.0 断言与 OIDC id_token 的流程差异,说明游戏服应在哪一步介入换票、校验与建号,并给出可运行的 Go Provider 抽象、一次性 state 存储和三种渠道内存 fake 测试,帮助读者划清客户端与服务端的信任边界。
从短 Token 过期后的续期与注销需求出发,讲清 Refresh Token 轮换、token family 重放检测、jti 精确拉黑与 token_version 全局失效的取舍,给出 Redis 键设计与原子操作要点,并用 Go 实现可测试的 RefreshStore 与吊销测试。
拆解一次游戏登录从凭证校验到拿到可调用 Token 的完整链路,说明 JWT 三段结构以及 alg、typ、iss、aud、exp、nbf、iat、sub、jti 各自怎么验,比较 HS256 与 RS256、EdDSA 的适用边界,并用 Go 标准库实现可测试的 HS256 签发与校验。
从登录后的凭证生命周期出发,对比服务端 Session、自包含 Token 与短 Token 加会话索引的混合模型,在吊销、扩展、断线重连、踢下线、跨区和泄露止损六个维度上给出取舍,并用带 TTL、绝对寿命与滑动续期的 Go 会话表实现和测试把结论落到代码。
说明邮箱、手机和第三方账号绑定的表结构与冲突处理,给出登录、绑定、解绑、改密、注销的风险分级、二次验证和冷却期策略,并用可运行 Go 代码验证绑定变更后旧会话全部失效,同时分析盗号后旧令牌仍有效的失败场景、修复顺序与唯一约束设计要点,并给出落地顺序。
说明一个账号在多个区服拥有角色时的登录、选角与跨区迁移流程,区分区服 ID 与逻辑分片 ID,并给出角色列表服务、同区重名、迁移后旧会话失效的可运行 Go 实现与表驱动测试,同时比较三种迁移语义的一致性风险与迁移期锁定要求,并给出可执行操作清单。
从账号、角色、租户、设备四层身份出发,说明游戏后端为什么不能用一张 user 表承载全部关系,给出全局账号 ID 与区服角色 ID 的分离策略、设备绑定不变量,并用可运行的 Go 模型与表驱动测试验证重复绑定、跨租户拒绝和解绑保留角色,最后给出落地检查清单。
讲清游戏协议日志应该记录方向、连接、cmd、seq、长度、耗时和结果码,而不是完整 body;演示十六进制 dump 的读法、半包粘包错位的定位方法、原始字节与解析结果一起落盘、采样脱敏,以及 tcpdump、Wireshark、应用日志和指标的分工。
逐字段拆解游戏协议的通用包头:magic、version、flags、cmd、seq、body_len、checksum 各自解决什么问题;讨论字节序、长度上限、粘包拆包、版本协商与未知命令处理,并给出带半包、粘包、超长包和校验失败测试的 Go 实现。
从请求-响应、推送、双向流三种交互形态出发,讲清 request_id 与 seq 的关联、分配、溢出与复用,以及客户端同步等待、回调与 Future 模型的取舍,最后讨论超时、重试和幂等边界,并给出一个可测试的 Go Caller 实现。
从零实现一个带长度前缀的 TCP Echo Server,覆盖监听、accept、每连接读循环、粘包处理、回写、读超时、单包上限与优雅退出,并给出使用 127.0.0.1:0 的真实监听测试、超长包拒绝、并发客户端与压测方法,说明本机数字只代表本机。
对比单线程事件驱动与多线程任务池的状态归属、同步成本与尾延迟风险,说明单线程世界如何避免阻塞、任务池如何控制共享状态与队列边界,并给出按 PlayerID、RoomID 分片的折中方案,最后用一个可运行的 Go 有界任务池演示顺序性、并发安全与关闭语义。
从并发模型、内存与 GC、热更、生态和团队成本五个维度对比 Go、Java 21、C++20、Rust 与 Skynet Lua,说明性能对比的正确实验口径,并给出可复现的 Go benchmark 与 Java 对照命令,帮助团队把语言选型从跑分争论拉回工程约束。
从不可变镜像、配置外置、健康探针与滚动发布讲起,分析长连接游戏服在 Kubernetes 上的难点、无状态与有状态服务的部署差异、HPA 的适用边界与小团队成本,并逐项解释一份 Deployment 与 Service 关键字段示例及其常见配置陷阱。
从拆分触发条件、游戏后端典型服务边界、同步调用与异步消息的取舍出发,说明分布式拆分新增的超时、重试、重复与乱序等失败模式,讨论服务契约、版本管理与模块化单体,并给出一个带健康检查、实例摘除、过期清扫、加权选择和重试排除的内存服务注册表实现与测试。
区分计划维护、滚动更新、故障摘除与紧急终止四类停服目标及其玩家感知差异,给出优雅停机的阶段顺序、在途请求排水、超时预算、幂等保存与重启恢复策略,并讨论停机演练与观测,最后附一个按阶段执行、支持 context 超时且保证关键保存的 Go 停机协调器。