PythonGIL的解决思路及解决方案

PythonGIL的解决思路及解决方案

1.6.1urllib.urlopen 和 urllib2.urlopen 18

1.6.2 urllib2 中的 GET 和 POST 方法 19

1.7 事件驱动框架 Twisted 20

1.7.1反应堆模式21

1.7.2运行、停止和调用稍后23

1.7.3传输、协议、协议工厂和延迟24

第2章通信加密26

2.1 软件和通信加密的几种常见解决方案 27

2.1.1 XOR位运算加密27

2.1.2 其他对称加密 29

2.1.3 非对称加密 30

2.2OpenSSL 33

2.2.1 生成证书 35

2.2.2 公钥和私钥的配置 40

2.3SSL/TLS通信43

2.3.1SSL/TLS 连接 45

2.3.2SSL/TLS HTTPS 通信 46

2.4 其他加密方法 49

2.4.1 哈希算法 49

2.4.2BASE64 52

2.4.3 多语言 53

第 3 章 服务器实现 55

3.1 构建Python Websocket服务器55

3.1.1 Websocket应用场景 57

3.1.2 实现Websocket握手协议 59

3.1.3 MAGIC_STRING在Websocket 60中的作用

3.1.4Websocket启动62

3.1.5 Websocket消息拆分和读取 63

3.2 多线程服务器64

3.2.1Python的多线程模式65

3.2.2 锁定 68

3.2.3Python GIL 70

3.2.4 多进程解决方案 72

3.2.5 为Websocket添加多线程 73

3.3 线程池 75

3.3.1默认线程池和进程池 75

3.3.2 协程 76

3.3.3 第三方库 78

3.3.4gevent数据结构85

第 2 部分 存储和数据库

第 4 章 基本内容存储 94

4.1 数据库存储类型 95

4.2SQL 和 NoSQL 96

4.2.1SQL 96

4.2.2SQL语句语法97

4.2.3 NoSQL 101

4.2.4NoSQL语句语法106

4.3 内存和IO读写速度 108

4.4 同步内存数据 109

4.4.1Redis数据库的持久化 111

4.4.2Redis主从数据库复制112

4.5 数据备份与恢复 113

4.5.1 备份类型 114

4.5.2 使用Python编写备份代码 115

4.6 不可或缺的SQLite 117

第 5 章 存储解决方案 121

5.1 高并发服务器存储方案 121

5.1.1 网站高并发服务器策略 122

5.1.2 数据库锁 125

5.2 缓存 127

5.2.1 内存缓存 127

5.2.2 大文件缓存129

5.2.3 分布式和集群130

5.3 二进制存储方案132

5.3.1 磁盘IO和缓存133

5.3.2 图片及音视频文件 134

5.4大规模计算135

5.4.1 图像服务器架构 136

5.4.2 读写文本137

5.4.3 文本搜索方案 138

5.5区块链技术139

第三部分 服务器架构及其解决方案

第6章 游戏服务器初步探索144

6.1 服务器消息和轮询 144

6.1.1 纸牌游戏和弱连接 145

6.1.2 消息轮询147

6.2 游戏服务器架构演进 149

6.2.1《远古纪元》游戏服务器149

6.2.2 现代网络游戏服务器 153

6.2.3 现代经典游戏服务器模型155

6.3 地图无缝连接157

6.3.1无缝连接分析158

6.3.2 无缝地图的更深层次问题 160

第7章游戏服务器交互165

7.1 无状态和有状态服务器设计解决方案 165

7.1.1 无状态服务器设计166

7.1.2 有状态服务器设计 167

7.2 投票 169

7.3 集群解决方案171

7.3.1 聚类的几种方式171

7.3.2 集群解决方案172

7.3.3数据库方案173

7.3.4网络服务和数据库174

7.3.5其他解决方案176

7.4 计划任务 178

第8章 游戏厅181

8.1 大厅登录流程 181

8.1.1 登录并选择游戏区182

8.1.2 注册与登录 183

8.2 中间件 185

8.2.1 中间件相关概念 186

8.2.2ElasticSearch 191

8.2.3 在Python中使用ES 193

8.3 聊天服务 195

8.3.1 聊天服务器的构建 195

8.3.2 聊天内容的获取和分发 196

8.4 大厅和游戏之间的连接 198

8.4.1 创建房间 198

8.4.2 连接游戏 199

第9章 实时交互服务器202

9.1 长连接、强交互202

9.1.1TCP连接203

9.1.2 多线程205

9.1.3异步控制206

9.1.4 加入队列207

9.2 使用UDP 210的解决方案

9.2.1 什么是UDP协议210

9.2.2 TCP协议和UDP协议的区别212

9.2.3 使用Python编写UDP服务214

9.2.4 添加多线程 216

9.3 协议包的设计与实现218

9.3.1 协议头和协议体 219

9.3.2 协议包完整性221

9.3.3协议加密和压缩222

9.3.4 协议包混乱223

9.4 断开和重新连接 224

第10章阶梯和经济系统227

10.1 什么是梯子 227

10.1.1 梯子的框架22​​9

10.1.2 数据加载230

10.2 天梯231级

10.3经济体系234

10.3.1经济系统简介234

10.3.2经济系统设计235

10.3.3 通货膨胀236

10.4 预留接口及热更新 238

10.4.1 如何预留接口 238

10.4.2 代码热更新241

第十一章 服务器负载能力和客户端优化方案243

11.1心跳服务243

11.1.1 应用层心跳服务245

11.1.2 心跳包协议246

11.2同步验证247

11.2.1 服务器数据包同步 248

11.2.2 游戏世界的同步248

11.3 服务器托管 251

11.3.1Python的多线程并发251

11.3.2 混合C/C++一253

11.3.3 混合 C/C++ 第 2 部分 257

11.4监护人流程266

11.4.1Windows 266下的守护进程

11.4.2 监控和重启进程268

11.5 客户端优化计划 270

11.5.1优化解270

11.5.2 游戏引擎271

第12章分布式服务器273

12.1什么是分布式系统273

12.1.1分布式文件系统275

12.1.2分布式服务277

12.1.3Python实现278

12.2 流媒体280

12.2.1暴风280

12.2.2火花284

12.2.3萨姆扎288

12.2.4Flink 290

12.2.5 三叉戟293

12.3Python分布式框架294

附录A 不同语言之间的差异297

前言

为什么写这本书

在人们心目中,游戏行业是一个热门且赚钱的行业,而游戏开发在非游戏开发者心中则是一个比较神奇的存在。 游戏是如何开发的? 游戏服务器到底是如何工作的?

软件服务器后端开发者对游戏服务器的开发非常感兴趣,而对于本身就是游戏开发者来说游戏开发服务器 协议,需要更深入的服务器逻辑游戏策划,各类游戏服务器的区分和编写,以及各种平台的优化。 了解更多。

作为游戏开发者,H5游戏和Flash游戏在沟通上有什么区别? 如何编写MMORPG服务器? HTTPS通信与普通HTTPS协议有什么区别? 如何进行分布式编程? 如何提高游戏服务器的高并发? 这些都是需要重点关注的问题。

不仅是游戏开发者,普通后端开发者也关心如何配置负载均衡,利用后端程序之间的相互通信来进行负载。 如今琳琅满目的开发套件和开发工具让这些事情事半功倍。 在这样的情况下,如何利用现有的工具来配置和增加并发,或者说如何利用分布式计算来提高业务效率和工作效率? 试图最大化工具的效率已经成为我们必须面对和解决的问题。

对于运维人员来说,他们不仅面临着为程序员服务的各种后台配置,还需要集群配置、HTTPS,甚至各类数据库的配置。

本书将深入探讨上述所有问题。

本书99%的内容使用Python语言来编写和说明代码或伪代码。 为什么使用Python? 这是因为,虽然开发游戏服务器的语言有很多,包括C/C++、Python、Node.JS等,但Python是目前流行度上升最快、用户线性增长的语言。 其简单的特点,即使是非专业程序员也能很快掌握,学习成本不高,也能达到比较满意的输出。

从国内情况来看,Python或者游戏开发的书籍很多,但将两者合而为一进行讲解和说明的却很少。 在几十年的工作过程中,作者经历了各种各样的项目。 虽然大部分属于游戏行业,但也涉及其他行业,比如视频网站、人工智能、区块链等。在翻阅这些项目的过程中,我看到很多团队和开发者为了不同的目的而做出各种详细的权衡。某个项目和业务功能,或者没有经验就踩过大坑。 这激发了我为这本书写一些想法。 希望能尽自己的一点绵薄之力,提炼和总结自己在游戏后端或者其他后端开发过程中遇到的各种问题、优化方案和解决方案。 如果我能具体解决读者的各种问题,那就是这本书是我的福气。

读者

本书对游戏服务器和应用服务器后端的优化、构建和应用进行了讲解和介绍。 为了照顾各个级别的读者,本书使用的语言是Python 2.7版本。 书中没有对Python的基本规则和语法进行详细介绍。 因此,要求读者具备Python编程基础知识,如Python库的导入、pip包的安装等。 工具使用、调用库函数等基础语法知识。 事实上,如果您花几个小时自学 Python,您将能够掌握 Python 编程的基础知识。

本书对读者没有特定的知识背景要求。 如果你有Python编程的基础知识,读完本书你应该清楚地了解服务器需要做什么、应该做什么以及如何做。 具体来说,本书适合以下类型的读者:

游戏服务器程序员。 本书的核心命题是游戏服务器的优化,涉及游戏服务器的基础和建设; Socket知识、HTTPS基础知识; 以及使用Python进行实现和优化。 无论您是游戏后端开发人员还是客户端开发人员,您都可以从本书中受益。

应用服务器开发程序员。 虽然游戏服务器程序员是重点,但我们的核心话题仍然是服务器后端的开发,所以从这个角度来看游戏开发服务器 协议,应用服务也是后端程序。 本书不仅分析了游戏服务器后端的编写和优化,还涵盖了分发。 系统、集群,甚至 Web 服务器。 也许读完这本书你会得到一些启发。

运维工程师。 其实只要是服务器开发,就会涉及到运维工作,而一个好的运维一定也一定会涉及到各种脚本语言的开发以及现有系统的扩展。 当团队中的程序员极其忙碌时,良好的运维可以帮助程序员分担40%甚至更多的工作量。 本书还介绍和探索了后台编码过程中的各种配置和设置,例如HTTPS配置、Websocket的Python实现等。如果你是一名运维工程师,你或多或少会从书本上汲取一些知识。

Python程序员。 Python 能做什么? 也可以写游戏服务器吗? 答案是肯定的。 只要做得好,搭配得当,用Python写游戏后端并不比其他语言(比如Java)差,有时甚至还方便。 如果你是一名Python程序员,想要涉足游戏后端开发,这本书一定会对你有很大的帮助。

如何阅读这本书

本书的内容在逻辑上分为三个部分。

第一部分包括第1章到第3章,主要介绍Python中网络的基本模块、通信加密以及一些服务器实现。 在:

第1章的内容包括Socket套接字的介绍和使用、基本的send和recv方法、阻塞和非阻塞方法以及urllib和urllib2等Python基础库的使用。

第2章介绍通信加密,包括基本的异或加密、对称和非对称加密,以及OpenSSL、SSL/TLS通信方式等的详细介绍。

第3章开始使用Python代码编写实际可运行的服务器代码,并介绍Websocket协议、GIL的优缺点以及Python线程池的使用。

第二部分包括第4章和第5章,介绍基本的内存存储和存储解决方案。

第4章主要介绍内存存储的基本内容,包括常用的几种数据库、内存和IO重写速度、内存数据的同步等。

第五章从存储解决方案开始,通过示例介绍了几种常用的存储解决方案,例如高并发服务器的存储解决方案。

第三部分包括第6章到第12章的内容,深入探讨了分布式、集群、MMORPG服务器类型的交互、弱连接和长连接、服务器托管解决方案等。大部分章节包括:

基本内容:本章所需知识点和内容的介绍。

代码示例:内容介绍后,有代码示例,解决基本内容中提出的问题。

示例图(表格):如果您对基本内容或代码示例介绍还不清楚开发学习,可以使用示例图进行更详细的分析。

结果:运行代码后可能出现的结果。

除上述内容外,为了解释和说明书中所涵盖的具体内容,本书还包含以下内容:

本章小结:主要章节末尾写有“小结”,小结有两种类型。

内容摘要:本章内容的摘要。

代码摘要:对代码进行总结,让读者更深入地理解正在阅读的代码。

粗体:粗体用于表示读者容易混淆或忽略的知识点或领域的重要提示。

勘误表和支持

由于作者水平有限,写作时间有限,书中难免存在一些错误或不准确之处,敬请读者批评指正。 读者可以通过以下渠道联系并反馈建议或意见:

即时通讯:添加个人QQ(37856)或微信(darkspycyber)举报问题。

电子邮件:发送电子邮件至。

致谢

在本书的写作过程中,作者得到了多方的指导、帮助和支持。

首先感谢机械工业出版社华章社副总编辑杨福川先生。 本书是作者的处女作。 杨老师在最初确定内容和目录时,孜孜不倦、耐心地给了完全不知道如何系统地写一本书的我很多指导和帮助,为这本书的写作提供了方向。 。 和指导。

其次,要感谢我的导师赖永浩,《编写高质量代码:改进Python程序的91条建议》的作者。 他给了我很大的帮助和鼓励。 他在Python领域几乎是无敌的(笑)。 我很荣幸也很高兴与他一起工作并一路走来。

再次感谢在各个项目和工作中提供宝贵经验和支持的导师和工作伙伴。 他们是(排名不分先后):王永梅、吴东源、陈文亚、李名江、金立东、李涵熙、王云根、徐一峰、常猛、赵云峰、王应泉等。

另外,我还要感谢参与整个审核验证过程的孙海良老师,以及默默支持我的其他出版工作者。 他们的辛勤工作保证了本书的顺利出版。

最后,我要感谢我的父母、家人和朋友。 感谢他们,我才有精力完成本书的全部写作工作。

谨以此书献给热爱编程、热爱游戏、热爱IT工作并为之奋斗的朋友们。 祝大家身体健康、生活幸福、事业成功!

蔡能(暗黑间谍)

文章来源:http://product.china-pub.com/7769479