这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
《MMO 服务器开发》3.1 地图数据结构与逻辑坐标
地图是场景逻辑的地基。本节从零写 internal/scene 的地图数据结构:一张 Width×Height 格网加一张阻挡位图描述静态地图,float64 逻辑坐标 Vec2 与客户端像素解耦,格边长固定 GridSize=8.0,并实现世界坐标与格号互转、可走判定与边界夹取。全部是 L1,go test 可直接跑。
posts
这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
地图是场景逻辑的地基。本节从零写 internal/scene 的地图数据结构:一张 Width×Height 格网加一张阻挡位图描述静态地图,float64 逻辑坐标 Vec2 与客户端像素解耦,格边长固定 GridSize=8.0,并实现世界坐标与格号互转、可走判定与边界夹取。全部是 L1,go test 可直接跑。
实体散落在多个逻辑线程与场景里,核心问题是「谁有权写它」。本节实现单写者模型下的归属表(正向 + 反向双索引),再把跨运行时搬迁拆成冻结—传输—接管三段,用缓冲重放解决冻结期间在飞的消息,最后用一个 Router 固化分流规则,并用 go test 验证迁移幂等与消息不丢不重。
2.1 的立即 Despawn 不够用:创建要先登记再可见,销毁要先结算再回收。本节把实体生命周期拆成 None/Pending/Active/Dying/Dead 五态,用一张迁移表管住所有合法跳转,再把载荷接进对象池,最后用 go test 验证回收与复用真的发生。
实体、句柄、运行时是三个层次。本节从零定下 EntityID 的高 16 位场景号 + 低 48 位序号位布局,用代际计数解决销毁后序号复用带来的 ABA 问题,再实现一张 O(1) 校验的运行时表,并用 16 个 go test 用例把三种过期引用逐一跑出来。
站内已经有一大批游戏服务器架构文章,卷一又写完了网络内核,那这一卷到底写什么、不写什么?本节把三份内容的分工摊开讲清楚:站内 practice 架构文负责「应该怎么设计」,卷一负责「网络底座怎么写」,本卷负责「玩法系统从零实现并跑出数字」,并把这条边界编码成一张可查询的表。
上一节立了「一个状态只能有一个写者」,但现实里这条原则会被两种方式破坏:写者其实不止一个,以及写者写的是旧数据。它们对应两个最经典的事故——重复发奖与旧数据覆盖。本节先把两个事故的根因拆开,再推出版本单调与幂等键两条守卫,最后用一份能跑的 Go 代码把这两条守卫钉成断言。
卷一讲完网络内核的四层,这一卷换一个视角重新切一遍:从玩法系统的状态归属出发,回答 gateway / logic / scene / data 各自该持有什么状态。本节先把「谁写状态,谁就是那一层」立成第一原则,再把每条命令归到唯一的处理层、把每份状态归到唯一的写入者,最后用一份能跑的 Go 代码把这两条归属规则钉成断言。
16.2 把服务编排起来了,但容器编排还有三件「看不见却致命」的事:配置怎么注入、健康检查怎么区分 liveness 与 readiness、收到 SIGTERM 后怎么优雅退出。本节讲清用环境变量注入配置、两条健康线各自的取舍、以及「停止接新请求→等在途 run 收尾→关连接池→退出」四步。用 uvicorn 0.54.0 + lifespan 真发 SIGTERM,贴出完整日志序列与参数表。
上一节做出了 ResearchCopilot 的镜像,但一个镜像撑不起一个服务——它还要数据库、缓存和后台 worker。本节写 docker-compose.yml 编排这四个服务,讲清 depends_on 不等于「依赖就绪」(须配 healthcheck)、同一镜像靠 command 扮演 api/worker 两种角色。真跑 config 与 ps 起栈验证。
本节是 TS 落点三的上半场:把 ResearchCopilot 打成 Python + Node 双栈镜像。用多阶段构建分别产出 TS 前端产物与 Python 依赖,只把产物拷进运行时镜像;再叠加 .dockerignore、--no-cache-dir、slim 基础镜像与 digest 固定四个瘦身杠杆。Dockerfile 在本机真构建,贴出镜像体积、分层与容器内验证的真实输出。
审计日志回答的是「谁在什么时候对什么做了什么」,而它本身也是攻击目标。本节把 TaskHub 的审计落成防篡改的哈希链:本机真实跑通写入 3 条记录校验通过,再改写第 2 行结果字段,校验立刻报「第 2 行内容被篡改」;并给出审计与业务日志的分离、保留期与合规映射。
加密的目标是「数据即使被截获或拖库也读不出」。本节把 TaskHub 的传输与存储两条链路都落成可运行代码:用真实握手演示强制 TLS 1.3 如何拒绝只支持 1.2 的客户端,用 AES-GCM 把 32 字节明文加密成 60 字节并验证篡改必然失败,用 bcrypt 演示同口令两次哈希不同、校验正确。
多租户系统里,一个没校验的查询参数就可能让 A 租户读到 B 租户的数据。本节用真实 Postgres 容器跑通两段对照实验:字符串拼接的查询被注入读到 2 行(越权),参数化查询命中 0 行(挡下);再用 html/template 演示输出转义,并给出白名单校验、命令注入与路径穿越的防护清单。
给出 Spring Boot 4 模块化重构的动因与全貌:从单一 spring-boot-autoconfigure 大 jar 拆成按技术划分的模块、根包与 starter 命名约定、starter 改名对照、Flyway/Liquibase 新增 starter,以及 Jackson 3 与 Jakarta EE 11 基线对依赖声明和 import 语句的实际影响。
本节为图书服务建立生产可用的日志基线:讲清 SLF4J 门面与 Logback 实现的分工,以及为什么不要直接依赖 Log4j2 API;给出六个级别的选择依据与 logging.level.<包名> 的精确控制;解读 4.1.1 的真实启动日志;讲透 logging.file.name 与 path 的差别、轮转配置、4.1 的 Log4j 文件轮转与 logging.group 分组。
《Python高级编程》全书导航页:说明高级卷在 Python 三卷体系中的定位、读者画像与前置知识,梳理 11 章从对象模型到生态演进的纵深线,并按章列出全部 33 节的完整索引,另交代全书 3.14.6 实测口径、两条阅读路径与延伸阅读方向,帮你从会用走到懂原理。
从 PEP 的状态机讲起,用 __future__ 与 warnings.deprecated 实测弃用周期,再用 sys.version_info、requires-python 与 CI 矩阵搭特性检测;最后逐条实测 3.14 的迁移点:PEP 649 注解延迟、PEP 765 finally 控制流、PEP 784 compression.zstd、多进程默认启动方式与 PEP 758。
真编译一个 C 宿主把 CPython 嵌进来,实测 Py_Initialize、PyRun_SimpleString、Py_InitializeFromConfig 的调用与返回值;再读 3.14.6 的真实头文件,对比标准构建与自由线程构建的对象布局、共享引用状态位、PyMutex 与临界区,并如实交代本机无法实测的部分。
用 uv build 真打一个包,逐文件拆开 wheel 的 .dist-info、RECORD、METADATA 与 .data/ 目录并实测安装落点,再看 entry_points 如何生成 console script、PEP 517 后端钩子的真实调用顺序,以及 wheel tag、平台标签与 abi3 的匹配规则。
《Python编程实战》全书导航页:说明实战卷在 Python 三卷体系中的定位、读者画像与前置知识,梳理四个部分之间的依赖关系,并按部分列出 18 章 54 节的完整章节索引,另给两条阅读路径建议与延伸阅读方向,帮你把入门语法升级为可交付的生产级工程能力。