第 1 章 / 共 51 章
卷一 · 起步与心智模型(卷首)

全书导言:XServer 是什么,这本书怎么读

卷一带你建立三个贯穿全书的概念——代(generation)、租约(lease)与引用归零回收。本章先回答最根本的问题:XServer 到底是什么,它把"写服务"这件事改变了哪一步。

本章导读

站位:本章不写代码,只建立判断力——读完你能说清 XServer 的部署物是什么、和你在用的方案差在哪、这本书哪几卷和你有关。如果你已经跑通过 demo 并理解"源码即部署物",可以快读 1.1 与 1.3 后直接进入第 2 章。

先给一句话定义:

XServer 是一个单文件 C 语言应用服务器:一个可执行文件(内嵌编译器与运行时),加一份纯 C 源码目录,就是一个完整的、可热重载的服务端部署。

这句话里有三个关键词,分别对应本书的三条主线:单文件(运行时与工具链全部内嵌,卷二讲构建与交付)、C 源码目录(应用不是预编译产物而是源码本身,卷一、卷三讲怎么写)、热重载(改代码零停机生效,卷四深潜)。

1.1 XServer 是什么

传统的 C 服务端开发是"写代码 → 编译 → 链接 → 部署二进制 → 重启",任何一个业务改动都要走完这条流水线。XServer 把这条流水线折叠进了运行时:你在目标机上放的部署物就是源码目录,xs.exe 在启动与热重载时用内嵌的 TCC 编译器把你的 C 代码编译成原生机器码,在进程内直接运行。

部署物对比
/* 传统 C 服务 */
myapp/  →  build 流水线  →  myapp.exe + 依赖清单  →  目标机安装依赖  →  重启生效

/* xs */
myapp/  =  xs.exe(唯一二进制,内嵌编译器/运行时/SDK)
        + main.c + modules/ + wwwroot/ + db/(源码即部署物)
        →  拷贝即部署,改源码即热重载

这不是"用 C 写脚本"的玩具化,而是一次严格的工程取舍:脚本是可信的原生代码,与宿主同进程、按地址直调宿主的 3,030 个 xrt API——没有解释器开销,没有 FFI 边界,函数调用就是函数调用。代价是没有沙箱:XServer 面向运维可控的可信部署,不接受不可信的第三方脚本(这条边界在卷五第 44 章展开)。

底下托着 XServer 的是 xrt——31 万行自研运行时(TLS 1.2/1.3、HTTP/1.1、WebSocket、五后端事件循环、协程、内存调试)。本书不重复教 xrt:涉及 xrt 的基础能力时,会在章尾"延伸阅读"框里链到 xrt 官网教程的对应章节。

1.2 与其他方案的对照

方案部署物业务逻辑改一行代码的成本
nginx + 模块二进制 + 大量配置配置为主,C 模块需重编译配置 reload;模块重新构建整个 nginx
Node / Go 服务运行时 + 源码或二进制JS / Go,包管理体系重启进程(PM2/supervisor 接管)
传统 C 服务自备构建流水线C,能力自建或引第三方库编译 + 部署 + 停机窗口
XServer一个 exe + 源码目录C,直调 3,030 个内嵌 API提交热重载,旧连接无感

一句话概括差异:其他方案把"运行环境"和"你的代码"当作两个东西管理,XServer 把它们装进同一个文件、同一个进程、同一套生命周期。

1.3 全书路线图

XServer 教程书(5 卷 51 章) 卷一 起步与心智模型 卷二 配置与服务装配 ┌──────────────────┐ ┌──────────────────┐ │ 代 · 租约 · 透传 │ ───▶ │ xs.json 逐字段 │ │ 最小应用 · 排错 │ │ vhost · 证书 · 回滚│ └──────────────────┘ └────────┬─────────┘ │ ┌──────────────────┐ ┌────────▼─────────┐ │ 卷五 实战项目 │ ◀─── │ 卷三 协议开发 │ │ REST / 网关 / 站群 │ │ HTTP · WS · TCP · UDP│ └──────────────────┘ └────────┬─────────┘ ┌────────▼─────────┐ │ 卷四 热重载深潜 │ │ 交接 · GC · 反模式 │ └──────────────────┘
  • 卷一(ch01-06):心智模型与工具链。最重要的三章是 03(心智模型)、04(最小应用)、06(排错)。
  • 卷二(ch07-13):xs.json 是唯一的装配界面,逐字段讲透约束与错误语义。
  • 卷三(ch14-25):四类协议的开发模式,按你用的协议挑读。
  • 卷四(ch26-31):热重载从"会触发"到"懂语义"——回滚、交接、零泄漏。
  • 卷五(ch32-44):扩展机制、部署运维、安全边界,以及三个端到端实战项目。

1.4 章节模板契约

本书 51 章执行同一个八段式结构。第 1 章把这个模板写成契约——后续任何一章若不符合它,视为章节缺陷而不是风格差异:

段名称作用
1本章导读本章在全书的位置、学习策略、可否跳读
2引入(N.1)从真实痛点出发,而不是从 API 清单出发
3概念(N.2)心智模型、对比表、流程图 / 状态图
4示例(N.3)五件套:文件名 + 出处 + 启动命令 + 真实输出 + "刚才发生了什么"
5契约(N.4)硬规则清单:线程 / 所有权 / 生命周期三条线
6常见错误症状 → 原因 → 错误写法 / 正确写法双栏对照
7编程练习基础 / 进阶 / 挑战三级,每级带验收标准
8小结速查表,一屏复习本章全部结论

章尾固定两个框:本章涉及的 API 参考(链到本书参考页并标注条目数)与 xrt 延伸阅读(链到 xrt 官网教程)。所有带"实机验证"标签的代码块,输出均为真实运行结果——包括动态端口、真实时间戳这类不可伪造的细节。

1.5 读者分流

你是谁建议路径
后端开发者卷一 → 卷三按协议挑读 → 卷四必读 → 卷五实战
运维 / 部署者ch01-02 → 卷二 → ch37-39
评估者ch01-04 + 性能基准 + ch44(安全边界)
贡献者顺序全读,xrt 基础按延伸阅读框补课

常见错误

找不到管理后台 / xsdbg
症状
启动后想访问 __xs/status 之类的管理端点做巡检,404。
原因
那是历史版本(vnext 世代)的内置调试应用。当前 XServer 主线刻意不带管理面——宿主只提供协议栈、脚本宿主与稳定性保护,管理面属于应用层。
✗ 错误认知
curl http://127.0.0.1:9080/__xs/status
/* 期望内置管理端点 → 404 */
✓ 正确做法
/* 自己在脚本里写管理路由:
 * 巡检/重载入口是普通业务路由 */

编程练习

基础盘点你的迁移面

列出你当前一个线上服务的组成(路由、静态资源、数据库、定时任务、证书),逐项标注:迁到 XServer 后它对应 xs.json 的哪个字段、应用目录的哪个部分,还是需要自己写的模块。

验收:每项都能归入"配置 / 静态层 / 脚本模块 / xrt 内置能力"四类之一,没有"不知道归哪"的悬空项。
进阶对照表扩充

在 1.2 的对照表中加入你实际使用的框架(如 Spring / FastAPI / Gin),补齐"部署物 / 业务逻辑 / 改一行代码的成本"三列。

验收:能指出每个方案"运行环境与业务代码"的耦合点各在什么位置。

小结

要点结论
XServer 的定义单文件 C 应用服务器:一个 exe + 一份源码目录 = 完整部署
部署物源码即部署物;TCC 内嵌编译为原生机器码,零解释器
能力面脚本按地址直调 xrt 3,030 个 API;无沙箱,面向可信运维
本书结构5 卷 51 章;八段式章节模板是契约
xrt 分工基础能力深链 xrt 官网教程,本书只讲 XServer 层
xrt 延伸阅读