这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
《MMO 服务器开发》3.1 消息头与命令号
字节流本身没有消息边界,双方必须先约定头几个字节表示什么。本节定下 aegis 的固定消息头——长度、命令号、序号与标志位四个字段,讲清「高字节模块号 + 低字节序号」的命令号分配策略、标志位的位域压缩,并给出可运行的 header.go 与边界测试。
posts
这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
字节流本身没有消息边界,双方必须先约定头几个字节表示什么。本节定下 aegis 的固定消息头——长度、命令号、序号与标志位四个字段,讲清「高字节模块号 + 低字节序号」的命令号分配策略、标志位的位域压缩,并给出可运行的 header.go 与边界测试。
把 Go 的 goroutine、JDK 21 的虚拟线程与 Netty 的 EventLoop 放进同一张表:三者的栈内存模型、调度器和 GC 交互各有什么不同。10 万个执行体的实跑对照给出真实数字,最后落在「什么条件下选哪条路线」的可判定结论上。
一个连接一个 goroutine 的成本到底在哪:2KB 起始栈、GMP 调度、netpoller 挂起与唤醒。本节真起进程跑 2000 条并发 TCP 连接,量出连接建立耗时、RTT 的 P50/P99 与吞吐,再用 Little 定律把延迟读成容量。
四种 I/O 模型的判别法、Reactor 模式的三个不变式,以及 Go runtime 的 netpoller 为什么能让「阻塞写法」在 epoll/kqueue 上跑成非阻塞。本节从零写一个单线程事件循环并用 go test 验证分发顺序与超时语义,再把它逐行对回 runtime 源码。
一个 MMO 服务端最少要有哪些零件?答案是十类:协议编解码、连接与会话、网关、消息路由、定时器、Actor 邮箱、幂等、同步模型、安全防护、压测工具。本节用一份可运行的 Go 检查器把这十个零件建模成可校验的清单,并给出每个零件由本书哪一章负责实现。
本站已有 170 篇游戏服务器实战文、110 篇月度归档、17 篇 Skynet 与 3 篇 Pitaya,外加一本只写了前 3 章的《游戏服务端编程实践》。本节诚实盘点这些内容的体量,用一张四重区隔表说清本书和它们的边界,并把边界编码成可运行的路由表。
一个 MMO 服务端和 Web 后端最大的差别,是它要扛住成千上万条有状态的长连接,而每条连接背后的玩家状态必须有唯一的家。本节先画出网关、逻辑、场景、数据四层的职责边界与依赖方向,再用一份能跑的 Go 代码把四层的启动与优雅关闭顺序钉成断言,作为全书的立论起点。
表结构不能靠手工执行 SQL,本节讲 schema 迁移:用带版本号的 SQL 文件记录变更、用 embed 把迁移编进二进制、按版本顺序在事务中逐条应用。随后介绍 sqlc——从 SQL 语句自动生成类型安全的 Go 代码的工具,说明它生成的代码形态与适用场景,并如实标注本机未安装、示例未经实测。
上一节讲了 database/sql 的原语,本节把它们组装成 TaskAPI 的仓储层。实现增删改查五个方法,用 LastInsertId 取自增 ID、用 RowsAffected 判断记录是否存在、把 ErrNoRows 翻译成领域错误,并用 BeginTx/Commit/Rollback 与 defer Rollback 惯用法保证多步写入的原子性。
TaskAPI 不能再把任务放在内存里了。本节讲清 database/sql 的双层设计——标准库提供接口、驱动提供实现,sql.DB 为何是连接池而非连接、连接池参数怎么调、Exec/QueryRow/Query 三种执行方式与预处理语句的区别。为便于本机实测,还给出一份纯标准库实现的内存驱动,把整条链路真正跑通。
pipeline、debate、voting 用固定脚本展示信息怎么流动,不比较真实模型质量。LatencyModel 延时也是人工模拟,不能当真实性能测量。AGREEMENT 是人工演示标签,不是计算出的真实一致率;多数票也可能同错。选择拓扑应基于任务、独立质量样本、总调用与真实延时,而不是这组固定结果。
MessageBus 是进程内顺序 pub/sub,按发布序号记录历史。它不是持久化消息队列,也不提供重试、确认或跨进程投递。同一 handler 失败会中断当前发布链;递归发布循环需调用方自行限制。worker 的同步调用移到线程不等于线程会被取消,同一个 worker 并发使用仍可能共享模型状态。
把单个 Agent 拆成 supervisor 与 worker:Worker 是一个带专用 system 提示与工具子集的 Agent(检索员、计算员),Supervisor 负责把目标拆成子任务、派给合适的 worker 并汇总结果。用假模型脚本化一次路由决策,真跑「拆成子任务、各自执行、汇总」的完整流程并打印派发与回收,给出单 Agent 与 supervisor-worker 的取舍表。
从整体架构切入 WebRTC:拆解信令面、媒体面与数据面三条通道,解释标准为何只定义 API 而不定义信令传输,给出基于 WebSocket 的最小可用信令服务实现,梳理房间状态、幂等重连与鉴权的工程要点,并附常见坑与选型权衡,帮助读者从零搭建可扩展的信令层。
服务端卷交稿之后,真正难回答的问题转移到了用户手中的设备上:网络会断、进程会被杀、旧版本不会消失。这篇序说明为什么客户端架构判断值得单独成书,它与服务端卷在默认假设上如何相反,卷一写给哪些读者、坚持什么立场,以及明确不承诺什么,适合谁在什么阶段翻开。
为什么写《后端架构设计》:市面上的架构书要么停在概念,要么直接给框架答案,缺的是从约束到决策、再到可执行检查的中间一层。这篇序说明四卷本的问题意识、四个基本立场、Go 主线加 Java 对照的选择、适合与不适合的读者,以及本书对“实测”和边界的承诺。
本文解决模型、提示、推理引擎三类变更缺乏统一发布流程的问题:建立离线评测(golden set、LLM-as-Judge、回归门禁)与在线评测(A/B、shadow、canary)闭环,给出 shadow 到 1%、5%、25%、50%、100% 的六阶段灰度流程,明确每阶段流量比例、观测时长、门禁指标与回滚阈值,并给出可运行的 Python 门禁判定脚本、canary YAML 与自动回滚条件。
本文解决 LLM 服务账单不可解释的问题:拆解 GPU 小时、token、存储、网络、向量库五类成本的计费口径与占比,给出自建与 API 的盈亏平衡计算方法与真实价格表,建立每千次请求成本、每用户成本、毛利率等单位经济指标。文中给出按团队、应用、租户打标签的归因方案,梳理量化、批处理、前缀缓存、路由、right-sizing 五类降本手段的降幅与风险,附可运行的 Python 核算脚本与常见坑。
本文解决 Agent 上线后黑盒不可诊断的问题:讲清 Agent 与单次 LLM 调用在多步循环、工具调用上的可观测差异,给出 OpenTelemetry GenAI 语义约定的 span 层级与属性清单,并落地 Langfuse 与 OpenLLMetry 接入代码。文中给出每会话步数、工具成功率、P95 延迟等指标口径与阈值,并列出把 span 打爆、敏感内容入库、异步丢 trace 等坑。
讲透 ThreadPoolTaskExecutor 的核心参数与队列策略(createQueue 的真实分支)、@Async 默认执行器的解析链与踩坑点,说明 SimpleAsyncTaskExecutor 为何不宜上生产,并用 TaskDecorator 与 ContextPropagatingTaskDecorator 解决 MDC 与安全上下文的跨线程丢失。