|
@@ -1,23 +1,3 @@
|
|
|
-# 从《架构漫谈》到游戏服务器架构
|
|
|
|
|
-
|
|
|
|
|
-> **两本书精读总结 + GitHub 游戏架构生态调研**
|
|
|
|
|
->
|
|
|
|
|
-> 阅读与调研日期:2026-10-20
|
|
|
|
|
-
|
|
|
|
|
----
|
|
|
|
|
-
|
|
|
|
|
-## 阅读说明
|
|
|
|
|
-
|
|
|
|
|
-- **《架构漫谈(架构师迷你书)》**:王概凯(Kevin)著,2016 年 InfoQ 专栏集结,共 9 篇,本次阅读的是**全文**。
|
|
|
|
|
-- **《游戏服务器架构与优化》**:蔡能著,机械工业出版社 2018 年出版,ISBN 978-7-111-59547-2,属于“游戏开发与设计技术丛书”。本次 EPUB 为**免费样章**,包含前言、第 1 章、第 2 章(至 2.3 节),但附有完整目录。因此:
|
|
|
|
|
- - 第 1~2 章的内容来自样章原文;
|
|
|
|
|
- - 第 3~12 章只能依据目录做**结构导读**,不虚构样章之外的技术细节;
|
|
|
|
|
- - 书籍未覆盖的“游戏服务器架构实践”部分,由第四章的 GitHub 调研补足。
|
|
|
|
|
-- **GitHub 调研**:通过 GitHub REST API 按关键词检索、按 Star 排序,并阅读代表性项目的 README。Star 数为 2026-10-20 的查询结果,仅代表社区热度,不代表项目质量、维护状态或商业适用性。
|
|
|
|
|
-- 本文不是逐章复述,而是**提炼观点、建立联系、给出判断**。书中观点均标注来源;带有“评价”“局限”字样的部分为本文的分析。
|
|
|
|
|
-
|
|
|
|
|
----
|
|
|
|
|
-
|
|
|
|
|
## 结论先行
|
|
## 结论先行
|
|
|
|
|
|
|
|
1. **架构的起点不是技术选型,而是问题识别。** 先问“这是谁的问题、到底是什么问题”,再谈方案;游戏服务器架构的起点是玩家、业务、运维、研发四类 stakeholder 的约束。
|
|
1. **架构的起点不是技术选型,而是问题识别。** 先问“这是谁的问题、到底是什么问题”,再谈方案;游戏服务器架构的起点是玩家、业务、运维、研发四类 stakeholder 的约束。
|
|
@@ -28,27 +8,6 @@
|
|
|
|
|
|
|
|
---
|
|
---
|
|
|
|
|
|
|
|
-## 一、两本书速览
|
|
|
|
|
-
|
|
|
|
|
-| 维度 | 《架构漫谈》 | 《游戏服务器架构与优化》 |
|
|
|
|
|
-|---|---|---|
|
|
|
|
|
-| 作者 | 王概凯(Kevin) | 蔡能 |
|
|
|
|
|
-| 出版/来源 | 2016 年,InfoQ 专栏集结(架构师迷你书) | 机械工业出版社,2018 年 |
|
|
|
|
|
-| 篇幅 | 9 篇文章 | 12 章 + 附录 |
|
|
|
|
|
-| 主题 | 架构认知、概念识别、问题识别、架构切分、软件与软件架构、架构师角色、代码架构、技术与业务关系 | Python 网络编程、通信加密、存储与数据库、游戏服务器各子系统、分布式服务器 |
|
|
|
|
|
-| 本次阅读范围 | 全文 | 免费样章:前言 + 第 1 章 + 第 2 章(至 2.3) |
|
|
|
|
|
-| 一句话概括 | 架构是识别人的问题、界定边界、按权责切分并重新组合的实践活动 | 以 Python 实操为线索,覆盖从 Socket 到分布式游戏服务器的工程问题 |
|
|
|
|
|
-| 主要价值 | 提供“为什么这样切”的思维方式 | 提供“具体怎么做”的网络、加密、存储与服务器实现素材 |
|
|
|
|
|
-
|
|
|
|
|
-两本书恰好互补:
|
|
|
|
|
-
|
|
|
|
|
-- 《架构漫谈》回答 **Why / Who**:为什么需要架构、架构为谁服务、如何识别问题和切分利益。
|
|
|
|
|
-- 《游戏服务器架构与优化》回答 **How(底层)**:Socket、HTTP、加密、存储、服务器进程如何实现。
|
|
|
|
|
-- GitHub 上的开源项目回答 **How(系统级)**:真实项目如何组织网关、大厅、战斗、数据、分布式与运维。
|
|
|
|
|
-
|
|
|
|
|
----
|
|
|
|
|
-
|
|
|
|
|
-## 二、《架构漫谈》精读总结
|
|
|
|
|
|
|
|
|
|
### 2.1 一句话主旨
|
|
### 2.1 一句话主旨
|
|
|
|
|
|
|
@@ -331,231 +290,6 @@ flowchart TB
|
|
|
|
|
|
|
|
---
|
|
---
|
|
|
|
|
|
|
|
-## 三、《游戏服务器架构与优化》总结
|
|
|
|
|
-
|
|
|
|
|
-### 3.1 书籍信息与全书结构
|
|
|
|
|
-
|
|
|
|
|
-- 书名:游戏服务器架构与优化
|
|
|
|
|
-- 作者:蔡能
|
|
|
|
|
-- 出版社:机械工业出版社,2018 年
|
|
|
|
|
-- ISBN:978-7-111-59547-2
|
|
|
|
|
-- 丛书:游戏开发与设计技术丛书
|
|
|
|
|
-- 技术栈:Python 2.7 / CPython(书中明确说明)
|
|
|
|
|
-- 结构:三部分 + 附录
|
|
|
|
|
-
|
|
|
|
|
-| 部分 | 章节 | 主题 |
|
|
|
|
|
-|---|---|---|
|
|
|
|
|
-| 第一部分 网络和服务器 | 第 1 章 | Python 网络编程模块 |
|
|
|
|
|
-| | 第 2 章 | 通信加密 |
|
|
|
|
|
-| | 第 3 章 | 服务器实作(WebSocket、多线程、线程池) |
|
|
|
|
|
-| 第二部分 存储与数据库 | 第 4 章 | 基础内容存储(数据库种类、SQL/NoSQL、内存与 IO、备份恢复、SQLite) |
|
|
|
|
|
-| | 第 5 章 | 存储方案(高并发存储、高速缓存、二进制存储、大规模计算、区块链) |
|
|
|
|
|
-| 第三部分 服务器架构及其方案 | 第 6 章 | 游戏服务器初探(消息与轮询、架构演变、地图无缝连接) |
|
|
|
|
|
-| | 第 7 章 | 游戏服务器的交互(无状态/有状态、轮询、集群、定时任务) |
|
|
|
|
|
-| | 第 8 章 | 游戏大厅(登录流程、中间件、聊天服务、大厅与游戏对接) |
|
|
|
|
|
-| | 第 9 章 | 实时交互服务器(长连接、UDP、协议包设计、断线重连) |
|
|
|
|
|
-| | 第 10 章 | 天梯和经济系统(天梯层级、经济系统、预留接口与热更新) |
|
|
|
|
|
-| | 第 11 章 | 服务器承载量和客户端优化(心跳、同步校验、承载、守护者进程、客户端优化) |
|
|
|
|
|
-| | 第 12 章 | 分布式服务器(分布式系统、流式处理、Python 分布式框架) |
|
|
|
|
|
-| 附录 A | | 不同语言之间的区别 |
|
|
|
|
|
-
|
|
|
|
|
-**重要说明:** 本次 EPUB 只包含前言、第 1 章、第 2 章(至 2.3 节“SSL/TLS 通信”的开头)。第 3~12 章的导读仅依据目录标题,不包含样章之外的原文细节。
|
|
|
|
|
-
|
|
|
|
|
-### 3.2 第 1 章:Python 网络编程模块
|
|
|
|
|
-
|
|
|
|
|
-这一章是全书的技术地基,按“底层 → 高层 → 框架”的顺序展开。
|
|
|
|
|
-
|
|
|
|
|
-#### 3.2.1 Socket 基础
|
|
|
|
|
-
|
|
|
|
|
-- 书中使用 **Python 2.7 / CPython**;提到 CPython、Jython、IronPython、PyPy 等实现,说明 CPython 的标准库封装基本沿用 C 的写法。
|
|
|
|
|
-- Python 提供 `socket` 和 `SocketServer` 两个模块;书中重点讲 `socket`,因为它更接近底层。
|
|
|
|
|
-- `socket(family, type[, protocol])`:
|
|
|
|
|
- - `AF_INET`:IPv4 地址族;
|
|
|
|
|
- - `SOCK_STREAM`:TCP 数据流;
|
|
|
|
|
- - `SOCK_DGRAM`:UDP 数据报;
|
|
|
|
|
- - `SOCK_RAW`:原始套接字,可用于抓包/协议分析。
|
|
|
|
|
-- 阻塞 vs 非阻塞:
|
|
|
|
|
- - 阻塞:I/O 完成前函数不返回,线程卡住;
|
|
|
|
|
- - 非阻塞:立即返回,线程继续执行;
|
|
|
|
|
- - 设置方式:`setblocking(False)`、`settimeout(timeout)`,或用 `select` 的超时模拟非阻塞;
|
|
|
|
|
- - `select` 直接访问操作系统,监控套接字/文件/管道,等待可读、可写或异常事件。
|
|
|
|
|
-
|
|
|
|
|
-#### 3.2.2 服务器端 Socket
|
|
|
|
|
-
|
|
|
|
|
-- `bind((host, port))`:绑定地址和端口;`0.0.0.0` 表示绑定本机所有网卡 IP。
|
|
|
|
|
-- `listen(backlog)`:把主动连接 Socket 变为被动连接 Socket;`backlog` 是内核中已完成/待处理连接的队列大小,至少为 0(Python 2.7 以下为 1),内部实现通常为 `backlog + 1`,最大值依赖操作系统。
|
|
|
|
|
-- `accept()`:接收连接,返回新的 Socket 对象和客户端地址。
|
|
|
|
|
-- `setsockopt(level, optname, value)`:
|
|
|
|
|
- - `SOL_SOCKET`、`IPPROTO_IP`、`IPPROTO_IPV6`、`IPPROTO_TCP` 等层级;
|
|
|
|
|
- - 常用选项:`SO_REUSEADDR`(关闭后立即重用地址)、`SO_SNDBUF` / `SO_RCVBUF`(发送/接收缓冲区);
|
|
|
|
|
- - `getsockopt` 可读回设置值。
|
|
|
|
|
-- 书中提醒:`select` 不是唯一选择,还有 `poll`、`epoll`;直接 `accept` 也可行,但可能因资源耗尽而无法检测。
|
|
|
|
|
-
|
|
|
|
|
-#### 3.2.3 客户端与通用方法
|
|
|
|
|
-
|
|
|
|
|
-- 客户端:`connect((host, port))`;`connect_ex` 返回 C 层错误码而不是抛异常;`getservbyname('http', 'tcp')` 查服务端口;`gethostbyname` / `gethostbyname_ex` 做 DNS 查询。
|
|
|
|
|
-- TCP 收发:`recv(bufsize[, flags])`、`send(string[, flags])`、`sendall(string[, flags])`;`send` 可能只发送部分字节,`sendall` 保证全部发送,失败抛异常。
|
|
|
|
|
-- UDP 收发:`recvfrom` 返回 `(data, address)`;`sendto(string, address)`;UDP 无连接,需要显式地址;可设置 `SO_BROADCAST` 做广播。
|
|
|
|
|
-
|
|
|
|
|
-#### 3.2.4 HTTP 服务与请求
|
|
|
|
|
-
|
|
|
|
|
-- `SimpleHTTPServer`:命令行即可启动一个静态文件 HTTP 服务;目录下有 `index.html` 则作为默认页,否则列出目录内容。
|
|
|
|
|
-- `BaseHTTPServer`:提供 `HTTPServer` 和 `BaseHTTPRequestHandler`;可继承并重写 `do_GET` / `do_POST`,通过 `send_response`、`send_header`、`end_headers`、`wfile` 返回内容。
|
|
|
|
|
-- 书中指出:后续章节的**低实时性游戏服务器**可以用 HTTP 服务实现;也可以用它对接微信等移动端接口。
|
|
|
|
|
-- `urllib` / `urllib2`(Python 2.7 中分开):
|
|
|
|
|
- - `urlopen` 获取 URL 内容;`urllib2.urlopen` 支持 `timeout`,对服务器代码很重要;
|
|
|
|
|
- - `Request` 可添加 Header、设置代理;
|
|
|
|
|
- - GET 用 `url + "?" + urlencode(data)`;POST 把 `urlencode` 后的字符串作为 `Request` 的第二个参数;
|
|
|
|
|
- - 代理通过 `ProxyHandler`、`build_opener`、`install_opener` 配置。
|
|
|
|
|
-
|
|
|
|
|
-#### 3.2.5 Twisted 与事件驱动
|
|
|
|
|
-
|
|
|
|
|
-- Twisted 是基于事件驱动的框架,支持 TCP、UDP、HTTP、SSL/TLS、IMAP、SSH、IRC、FTP 等协议,客户端和服务器端都有实现。
|
|
|
|
|
-- 核心是 **Reactor 模式**:
|
|
|
|
|
- - 一个或多个输入源;
|
|
|
|
|
- - 一个 Service Handler 负责接收事件并按规则分发;
|
|
|
|
|
- - 多个 Request Handler 处理具体请求。
|
|
|
|
|
-- 书中用“办卡窗口”的类比解释 Reactor:客户填表(注册输入源)→ 窗口收表(Service Handler)→ 制卡办公室(Request Handler)→ 通知客户取卡。
|
|
|
|
|
-- Twisted 的 `reactor` 默认是**单线程**的;事件回调函数必须尽快返回,不能阻塞,否则整个 reactor 卡住。
|
|
|
|
|
-- 关键概念:
|
|
|
|
|
- - `Transports`:单个连接的字节收发抽象(TCP/UDP 连接);
|
|
|
|
|
- - `Protocols`:应用协议抽象;
|
|
|
|
|
- - `Protocol Factories`:把连接和自定义 Protocol 组合起来;
|
|
|
|
|
- - `Deferred`:管理事件函数序列,包含 callback 链和 errback 链;用于处理异步结果和错误;
|
|
|
|
|
- - `callLater`、`callWhenRunning`、`reactor.run()`、`reactor.stop()`。
|
|
|
|
|
-- 书中用 Twisted 写了一个聊天服务器示例:`connectionMade`、`lineReceived`、`connectionLost`、`ChatFactory`,展示了事件驱动编程的状态机写法。
|
|
|
|
|
-
|
|
|
|
|
-#### 3.2.6 第 1 章的方法论意义
|
|
|
|
|
-
|
|
|
|
|
-这一章不是单纯的 API 手册,它在为后续游戏服务器选型做铺垫:
|
|
|
|
|
-
|
|
|
|
|
-- **HTTP 还是 Socket?** 低实时性、请求-响应型业务可用 HTTP;强交互、持续推送用长连接 Socket。
|
|
|
|
|
-- **TCP 还是 UDP?** TCP 可靠、有序,但有队头阻塞和重传延迟;UDP 低延迟、不可靠,适合实时战斗,但需要自己处理丢包、乱序、重传。
|
|
|
|
|
-- **阻塞还是非阻塞?** 高并发服务器不能用“一连接一线程”的阻塞模型;需要 `select`/`poll`/`epoll` 或事件驱动框架。
|
|
|
|
|
-- **自己写还是用框架?** Twisted 这类框架把 Reactor、协议、连接管理封装起来,让开发者专注业务逻辑;但理解底层 Socket 仍然是排错和性能优化的基础。
|
|
|
|
|
-
|
|
|
|
|
-### 3.3 第 2 章:通信加密
|
|
|
|
|
-
|
|
|
|
|
-这一章从“为什么需要加密”讲到 OpenSSL 与 SSL/TLS,覆盖了游戏服务器常见的通信安全基础。
|
|
|
|
|
-
|
|
|
|
|
-#### 3.3.1 加密的基本概念
|
|
|
|
|
-
|
|
|
|
|
-- 加密:把可读信息变成不可辨识的信息;接收方用约定方式还原。
|
|
|
|
|
-- 书中用摩尔斯电码、温州方言、纳瓦霍语等例子说明:只要发送方和接收方能“知晓”,中间攻击者无法知晓,就是一种加密方式。
|
|
|
|
|
-- 压缩也可以算一种“改变格式”的弱加密,但只有解压才能还原。
|
|
|
|
|
-
|
|
|
|
|
-#### 3.3.2 对称加密
|
|
|
|
|
-
|
|
|
|
|
-- **XOR 异或加密**:逐比特异或,加密和解密使用同一密钥;运算量小、速度快,但非常容易被破解,重要项目不推荐。
|
|
|
|
|
-- **DES**:分 ECB(电码本模式)和 CBC(密码分组链接模式);ECB 每 8 字节独立加密,CBC 每段与上一段相关。
|
|
|
|
|
-- **AES**:美国国家标准与技术研究所用于替代 DES 的标准,基于 Rijndael 算法;Python 可用 PyCrypto、PyAES 等库。
|
|
|
|
|
-- **Blowfish** 等其他对称算法。
|
|
|
|
|
-- 对称加密的特点:加解密用同一密钥,速度快,适合大量数据;缺点是密钥分发和管理困难。
|
|
|
|
|
-
|
|
|
|
|
-#### 3.3.3 非对称加密与数字签名
|
|
|
|
|
-
|
|
|
|
|
-- 公钥/私钥成对,数学相关;用公钥加密,只能用私钥解密;反之,用私钥加密(签名),可用公钥验证。
|
|
|
|
|
-- 公钥可公开,私钥必须保密;知道其中一个不能推出另一个。
|
|
|
|
|
-- **数字签名**:用私钥加密信息的散列值,接收方用公钥解密并比对散列,验证来源和完整性;公钥的形式可以是数字证书。
|
|
|
|
|
-- **混合加密**(书中场景 1):
|
|
|
|
|
- - 用对称密钥(如 AES 密码 1234)加密大文件;
|
|
|
|
|
- - 用接收方公钥加密对称密钥;
|
|
|
|
|
- - 把密文和加密后的密钥一起发送;接收方用私钥解出对称密钥,再解密密文。
|
|
|
|
|
-- **签名场景**(书中场景 2):
|
|
|
|
|
- - 发送方用对称密钥加密文件,计算密文散列;
|
|
|
|
|
- - 用私钥加密散列值和对称密钥;
|
|
|
|
|
- - 接收方用公钥验证散列,确认未被篡改,再解出对称密钥解密密文。
|
|
|
|
|
-- **中间人问题**:公钥是公开的,攻击者可以用公钥伪造文件发给私钥持有方;需要 **CA(证书机构)** 颁发证书,把身份与公钥绑定。
|
|
|
|
|
-- **证书链**:CA 用自己的私钥签证书;接收方用 CA 的公钥验证证书,再验证对方身份。书中也提到,代理/抓包场景中浏览器可能被诱导导入“假证书”,说明证书信任链本身也是攻击面。
|
|
|
|
|
-- 书中建议:对称加密 + 非对称加密 + 散列/签名结合使用;高安全场景可使用物理介质证书(如 U 盾)。
|
|
|
|
|
-
|
|
|
|
|
-#### 3.3.4 OpenSSL 与证书
|
|
|
|
|
-
|
|
|
|
|
-- OpenSSL 由三部分组成:
|
|
|
|
|
- - `libssl`:SSL 协议库;
|
|
|
|
|
- - `libcrypto`:密码算法库;
|
|
|
|
|
- - `openssl`:命令行应用程序。
|
|
|
|
|
-- Python 中可用 `pyOpenSSL` 或 `M2Crypto`;书中给出了安装、SSL 连接测试、生成密钥/证书的示例。
|
|
|
|
|
-- 常见证书/密钥格式:
|
|
|
|
|
- - **PEM**:Base64 文本,OpenSSL 默认格式,用 `BEGIN/END` 标识内容;
|
|
|
|
|
- - **DER**:PEM 的二进制版本;
|
|
|
|
|
- - **PFX / P12**:PKCS#12,包含私钥、公钥、证书,可导入 IIS 等;
|
|
|
|
|
- - **JKS**:Java Key Store,用于 Tomcat/WebLogic 等;
|
|
|
|
|
- - **KDB**:IBM 格式;
|
|
|
|
|
- - **CSR**:证书签名请求,提交给 CA 签发证书;
|
|
|
|
|
- - **OCSP**:在线证书状态协议;
|
|
|
|
|
- - **CER / CRT / KEY**:证书/私钥文件常见扩展名;
|
|
|
|
|
- - **CRL**:证书吊销列表;
|
|
|
|
|
- - **SCEP**:简单证书注册协议;
|
|
|
|
|
- - **PKCS7 / PKCS12**:加密消息/个人数字证书标准。
|
|
|
|
|
-- 生成证书的基本流程(书中示例):
|
|
|
|
|
- 1. `openssl genrsa -out ca-key.pem 1024` 生成私钥;
|
|
|
|
|
- 2. `openssl req -new -out ca-req.csr -key ca-key.pem` 生成 CSR;
|
|
|
|
|
- 3. `openssl x509 -days 3650 -req -in ca-req.csr -out ca-cert.pem -signkey ca-key.pem` 自签证书;
|
|
|
|
|
- 4. `openssl pkcs12 -export ...` 转 PFX/P12。
|
|
|
|
|
-- 公钥/私钥配置:
|
|
|
|
|
- - `openssl genrsa -out rsa_private_key.pem 1024`;
|
|
|
|
|
- - `openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem`。
|
|
|
|
|
-- **SSL/TLS**:
|
|
|
|
|
- - 位于应用协议(HTTP、Telnet、FTP 等)和 TCP/IP 之间;
|
|
|
|
|
- - 提供数据加密、服务器认证、消息完整性、可选客户端认证;
|
|
|
|
|
- - 代价是认证和加解密带来性能开销;
|
|
|
|
|
- - 书中以 `pyOpenSSL` 建立到 443 端口的 SSL 连接为例。
|
|
|
|
|
-
|
|
|
|
|
-#### 3.3.5 安全实践的启示
|
|
|
|
|
-
|
|
|
|
|
-- 不要在生产环境使用 XOR 或自制加密算法;
|
|
|
|
|
-- 对称加密适合数据,非对称加密适合密钥交换和签名,二者结合使用;
|
|
|
|
|
-- 证书解决“公钥属于谁”的问题;没有证书链,公钥加密仍可能被中间人攻击;
|
|
|
|
|
-- 私钥保护、证书有效期、吊销列表(CRL/OCSP)、密钥轮换都是运维的一部分;
|
|
|
|
|
-- 游戏客户端与服务器之间的协议,如果涉及账号、支付、聊天,应使用 TLS 或至少成熟的加密/签名方案,不能依赖“客户端混淆”。
|
|
|
|
|
-
|
|
|
|
|
-> **注意:** 样章在 2.3 节“SSL/TLS 通信”的开头结束,2.4 节“其他加密方式”及后续章节未包含在本次 EPUB 中。
|
|
|
|
|
-
|
|
|
|
|
-### 3.4 第 3~12 章结构导读(据目录)
|
|
|
|
|
-
|
|
|
|
|
-由于样章限制,以下只根据目录标题做“这本书大概讲什么”的导读,不对具体技术细节下结论。
|
|
|
|
|
-
|
|
|
|
|
-| 章节 | 目录主题 | 可能涉及的关键问题 | 对架构的意义 |
|
|
|
|
|
-|---|---|---|---|
|
|
|
|
|
-| 第 3 章 服务器实作 | 构建 Python WebSocket 服务器;多线程服务器;线程池 | 长连接、并发处理、线程复用 | 从单连接 Demo 走向可承载多玩家的服务器 |
|
|
|
|
|
-| 第 4 章 基础内容存储 | 数据库种类;SQL 与 NoSQL;内存与 IO 读写速度;同步内存数据;备份和恢复;SQLite | 选型、持久化、缓存一致性、容灾 | 游戏数据分层:内存/缓存/DB;持久化与回档 |
|
|
|
|
|
-| 第 5 章 存储方案 | 高并发存储方案;高速缓存;二进制存储;大规模计算;区块链 | 高并发写入、缓存策略、对象序列化、大数据 | 支撑大规模玩家数据与日志/分析 |
|
|
|
|
|
-| 第 6 章 游戏服务器初探 | 服务器消息和轮询;游戏服务器架构演变;地图的无缝连接 | 消息驱动、轮询、架构演进、无缝地图 | 游戏服务器从“能跑”到“能扩展”的演进 |
|
|
|
|
|
-| 第 7 章 游戏服务器的交互 | 无状态和有状态服务器设计方案;轮询;集群方案;定时任务 | 状态放在哪里、集群路由、定时器 | 大厅/战斗/全局服务的交互模式 |
|
|
|
|
|
-| 第 8 章 游戏大厅 | 大厅登录流程;中间件;聊天服务;大厅与游戏对接 | 登录鉴权、会话、聊天、服务对接 | 大厅作为“无状态/弱状态”接入层 |
|
|
|
|
|
-| 第 9 章 实时交互服务器 | 长连接和强交互;使用 UDP 的方案;协议包的设计和实现;断线重连 | 实时同步、UDP 可靠性、协议编解码、重连 | 战斗服务器的核心:低延迟与状态恢复 |
|
|
|
|
|
-| 第 10 章 天梯和经济系统 | 什么是天梯;天梯层级;经济系统;预留接口和热更新 | 排名/匹配、虚拟经济、热更新 | 游戏业务系统与服务器架构的耦合 |
|
|
|
|
|
-| 第 11 章 服务器承载量和客户端优化 | 心跳服务;同步校验;服务器承载;守护者进程;客户端优化 | 心跳、防作弊/校验、容量评估、进程守护 | 生产运维与性能优化 |
|
|
|
|
|
-| 第 12 章 分布式服务器 | 什么是分布式系统;流式处理;Python 分布式框架 | 分布式协调、消息/流处理、框架选型 | 从单机多进程走向多机分布式 |
|
|
|
|
|
-| 附录 A | 不同语言之间的区别 | 语言特性、性能、生态 | 技术选型的语言维度 |
|
|
|
|
|
-
|
|
|
|
|
-从目录可以看出,这本书的覆盖面是“**网络 → 加密 → 存储 → 服务器架构 → 分布式**”,试图把游戏服务器从底层 Socket 一直讲到分布式系统。它的优点是**工程链路完整**,缺点是每一块的深度受篇幅限制;样章只展示了最底层的网络与加密部分。
|
|
|
|
|
-
|
|
|
|
|
-### 3.5 本书的方法论与时代局限
|
|
|
|
|
-
|
|
|
|
|
-**方法论:**
|
|
|
|
|
-
|
|
|
|
|
-1. **从问题出发选协议**:HTTP/Socket、TCP/UDP、阻塞/非阻塞,不是“哪个高级用哪个”,而是由游戏的实时性、可靠性、连接数决定。
|
|
|
|
|
-2. **分层推进**:先讲网络原语,再讲加密,再讲存储,最后讲服务器架构与分布式;符合“先能通信,再能存,再能扩展”的工程顺序。
|
|
|
|
|
-3. **重视运维细节**:目录中专门有心跳、同步校验、承载量、守护者进程、断线重连、热更新等章节,说明作者把“可运营”视为架构的一部分。
|
|
|
|
|
-4. **代码驱动**:大量 Python 示例,适合边看边跑;对初学者友好。
|
|
|
|
|
-
|
|
|
|
|
-**时代局限:**
|
|
|
|
|
-
|
|
|
|
|
-- **Python 2.7**:书中明确以 Python 2.7 为基准。今天应使用 Python 3;`urllib`/`urllib2` 已合并,`asyncio`/`uvloop` 已成为高并发主流,Twisted 仍可用但不再是唯一选择。
|
|
|
|
|
-- **2018 年的技术语境**:区块链、某些分布式框架的讨论带有当时的时代印记;今天应结合云原生、Kubernetes、Agones、NATS/gRPC、OpenTelemetry 等重新评估。
|
|
|
|
|
-- **样章限制**:无法判断第 3~12 章的深度与准确性;从目录看覆盖面广,但“广”往往意味着单点深度有限。
|
|
|
|
|
-- **Python 性能**:CPython 的 GIL、解释执行性能,使其更适合原型、工具、中小规模服务或逻辑层;超高性能战斗服务器通常会用 C++/Go/Rust 或把热点下沉到 C 扩展。书中也提到 Jython 规避 GIL 等话题,说明作者意识到语言限制。
|
|
|
|
|
-
|
|
|
|
|
-**评价:**
|
|
|
|
|
-
|
|
|
|
|
-- 作为**入门书**,它很好地建立了“游戏服务器需要哪些底层知识”的地图:Socket、HTTP、加密、存储、并发、集群、分布式。
|
|
|
|
|
-- 作为**架构书**,样章展示的更多是“组件知识”,而非“架构决策方法”;真正的架构取舍(状态同步 vs 帧同步、单体 vs 分布式、网关职责)需要读者结合其他资料。
|
|
|
|
|
-- 适合读者:有 Python 基础、想进入游戏服务器领域的开发者;需要补网络与安全基础的客户端/全栈开发者。
|
|
|
|
|
-- 不建议把书中的代码直接用于生产:示例偏教学,缺少异常处理、资源管理、压测、安全加固。
|
|
|
|
|
-
|
|
|
|
|
----
|
|
|
|
|
|
|
|
|
|
## 四、GitHub 游戏架构生态调研
|
|
## 四、GitHub 游戏架构生态调研
|
|
|
|
|
|