这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
《游戏服务端编程实践》6.3.1 创建角色流程
从账号校验、区服与角色位检查到角色列表返回,完整拆解创建角色的七步拒绝链、request_id 幂等、名字并发抢注、角色与初始物品同事务边界,并给出可测试的 Creator 实现以及重复请求、重名、角色位已满三类失败用例,同时说明每一步的拒绝顺序与回滚策略。
posts
这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
从账号校验、区服与角色位检查到角色列表返回,完整拆解创建角色的七步拒绝链、request_id 幂等、名字并发抢注、角色与初始物品同事务边界,并给出可测试的 Creator 实现以及重复请求、重名、角色位已满三类失败用例,同时说明每一步的拒绝顺序与回滚策略。
从两个请求同时修改同一玩家、跨服写回与异步保存覆盖新值三类脏写场景出发,对比乐观锁、CAS、行锁与单写者模型的适用边界,说明整行覆盖和字段级更新的取舍,讨论可合并与不可合并字段的边界,并给出带版本校验、冲突后的重试拒绝合并策略与并发测试的 Go 存储实现。
按进程内 LRU、Redis、数据库三级拆解游戏存档缓存,对比 cache-aside、read-through、write-through 与 write-behind 的适用边界,讨论先更新数据库再删缓存、延迟双删和版本号的一致性方案,并给出带 TTL、容量上限与击穿保护的 Go 实现及测试。
从 ORM 的收益与代价切入,对照 GORM 与 Hibernate 在模型定义、持久化上下文、懒加载和批量写上的差异,解释游戏存档为何常采用显式 SQL 与手写仓储,并给出不依赖外部库的仓储接口、批量读取实现、schema 迁移策略与 N+1 失败案例。
明确一个角色只有一个归属服和唯一写入者,比较跨服读取用只读快照与远程调用的取舍,给出快照版本校验、跨服期间本服修改、合服 ID 重映射与重名处理的规则,并附可运行的 Go CrossReader 与 MergePlan 测试,覆盖快照过期、跨服只读与重名冲突。
用 base + add + mul 的固定公式统一属性结算,梳理等级、装备、buff、公会科技的分层来源,比较固定字段、EAV 与 JSON 列的查询和校验成本,并给出支持修正覆盖、删除回退、顺序无关与上下限钳制的 Go Attrs 实现及测试。
从身份、展示、进度、状态、审计五层拆解 Player 表,区分静态配置、动态存档与运行期状态,给出字段类型、默认值、NULL 语义和一张可直接落库的 MySQL DDL,并用带版本号的 Go 存储实现演示乐观锁、时区归一与在线状态不落库,避免并发写入整行覆盖。
从网关到后端实例的连接池出发,给出最大连接、最大空闲、获取超时、空闲超时与健康检查的取值方法,用可运行的 Pool 实现 Get/Put/Close 与坏连接摘除,并给出本机 benchmark、压测指标口径、三类常见故障的排查路径与复测方法。
把 Redis Pub/Sub、gRPC 与 Akka 放回游戏网关的后端通信位置,对照调用语义、超时、背压、顺序与运维成本;在零外部依赖的前提下用 Go net/rpc 实现可运行的整帧转发、超时丢弃与重连,并给出端到端测试和连接管理清单。
从客户端连接、网关解帧、路由查表到后端回包的完整链路出发,拆解固定帧头、不透明 Body、Session 读写超时与 BackendConn 串行化设计,并用 net.Pipe 写出可运行的端到端测试,覆盖未知路由、后端超时与断线丢弃等失败分支。
游戏网关不能只看峰值 QPS:把连接数、消息速率、p50/p99 延迟、错误率和每连接内存放在一起读,按匀速、阶梯、尖峰三种模型压测,并分段定位握手、鉴权、转发与后端耗时;附 Go net.Pipe 转发基准及结果解读,说明数字只代表本机。
把网关拆成可水平扩展的无状态层:连接留在本地、会话与路由放共享存储,扩容只接新连接,缩容先排空再退出;附可运行的 Go 加权 Balancer 与 Drain 流程,覆盖权重分配、停止接新、在途连接释放和全部排空后的降级,并给出注册表租约与故障降级建议。
区分 TCP keepalive、应用层心跳与 WebSocket ping/pong 的职责,给出移动网络下的心跳间隔、超时与抖动参数,梳理读超时、写超时和空闲超时的边界;附可运行的 Go Heartbeat,覆盖心跳重置、超时驱逐与并发更新。
解释为什么同一玩家的请求必须落到同一逻辑实例,对比取模、固定分片表、一致性哈希与 rendezvous 哈希在扩缩容时的迁移成本,给出 RoomID 创建即归属的路由规则和跨玩家交互的选主方案;附可运行 Go 实现与稳定性、迁移失效、房间粘性测试。
区分单播、组播、房间广播、全服广播与区域广播的语义和扇出代价,给出广播边界、消息合并与限流方法,分析慢消费者在丢弃、踢人、阻塞之间的取舍以及不同消息类型的处理策略,并说明跨网关广播的去重与过期规则;附可运行 Go Hub 实现和队列满丢弃计数测试。
从玩家可能同时拥有多条连接出发,讲清 accountID、playerID、connID 各自承担什么,设计认证、选角、在线、战斗四态会话机与非法迁移拒绝规则,并用带版本的绑定器处理重连顶替、旧连接写失败、迟到解绑和跨网关迁移;附可运行 Go 实现与并发测试。
把游戏网关的路由拆成“网关到后端服务”和“服务到具体实例”两层,比较轮询、最少连接、一致性哈希、取模与加权随机五种负载均衡策略,说明游戏为什么通常按 playerID 或 roomID 哈希,并给出支持权重、摘除和动态换表的路由器 Go 实现与稳定性、重分配测试。
按建连、首包认证、会话绑定、心跳、关闭重连五个阶段拆解游戏网关的连接管理,说明网关如何验证登录服 token 而不泄露密钥,给出连接注册表的字段设计、并发安全与清理策略,并用可运行的 Go 注册表实现和测试覆盖重复绑定、未认证超时与并发注册。
从连接终结、鉴权、会话绑定、路由、限流和协议适配六项职责出发,区分游戏网关与通用反向代理,比较直连、网关加后端、边缘接入加网关三类拓扑的适用规模与故障边界,说明何时不该引入网关,并给出可运行的 Go 拓扑规则检查与网关重启、版本不匹配两类失败场景的处置清单。
把登录态从 token 落到会话表:设计会话字段、单端与多端策略、登录服到网关的踢下线链路,以及断线重连的复验规则;附可运行的 Go Registry,覆盖顶号、设备并存、会话上限与回调只触发一次,并说明多网关场景下的通知幂等、对账与失败恢复。