游戏服务器架构与优化
上QQ阅读APP看书,第一时间看更新

前言

为什么要写这本书

在人们的观念中,游戏行业是一个既火爆又赚钱的行业,而游戏开发在非游戏开发人员的心里,则是比较神奇的存在。隔行如隔山,游戏究竟是如何开发的?游戏服务器究竟又是怎样工作的?

软件服务器后台开发人员对于游戏服务器的开发充满兴趣,而对于本身就是游戏开发者的人来说,对于更深层次的服务器逻辑,各种类型游戏服务器的区分和编写,各种平台的优化,都需要进行更进一步的了解。

作为游戏开发人员,H5 Game和Flash Game之间通信的差异在哪里?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续写速度,同步内存数据等。

❑第5章从存储方案展开,结合实例对几种常用的存储方案进行了介绍,如高并发服务器的存储方案等。

第三部分内容包括第6~12章的内容,深度挖掘了分布式、集群、MMORPG服务器类型的交互、弱连接和长连接、服务器承载方案等。在大部分章节中,都包含了:

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

❑代码示例:在介绍完内容后,就会有代码示例,以解决基本内容中所提出的问题。

❑示例图(表):对于基本内容或者代码示例介绍仍然不清楚的通过示例图进行更详细剖析。

❑结果:运行完代码后可能获得的结果。

除了以上内容外,书中还包含以下内容,目的是对书中涉及的特定内容进行解释和说明:

本章小结:主要章节的结尾写有“小结”,小结分为两种。

● 内容小结:有关本章内容的总结。

● 代码小结:对代码进行总结,让读者对所阅读的代码有更深的认识。

粗体字:对于知识点的重要提示或者读者容易混淆和忽略的地方,使用了粗字体进行了提示。

勘误和支持

由于笔者水平有限且撰稿时间有限,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。读者可通过以下途径联系并反馈建议或意见:

❑即时通信:添加个人QQ(37856)或微信(darkspycyber)反馈问题。

❑电子邮件:发送email到darkspycpp@gmail.com。

致谢

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

首先要感谢的是机械工业出版社华章公司的副总编辑杨福川老师。本书是笔者的处女作,杨老师在起初定内容和目录的时候,不辞辛劳,耐心地给笔者这个完全不明白如何系统写书的人相当多的指点和帮助,为此书的撰写提供了方向和思路指导。

其次要感谢我的良师益友赖永浩,即《编写高质量代码:改善Python程序的91个建议》的作者。他给了我极大的帮助和鼓励,在Python领域他几乎是无敌的(笑),能和他共事并且一路走来非常地荣幸和开心。

再次,要感谢在各个项目和工作中提供宝贵经验和支持的良师益友和工作伙伴们,他们是(排名不分先后):王永梅、吴东源、陈文亚、李明江、金李东、李汉曦、王云根、徐逸峰、常萌、赵云峰、王英全等。

另外,还要感谢全程参与审核、校验等工作的孙海亮老师,以及其他背后默默支持的出版工作者,他们的辛勤付出保证了本书能够顺利面世。

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

谨以此书献给热爱编程、热爱游戏、热爱IT工作并为之奋斗的朋友们,愿大家身体健康、生活美满、事业有成!

蔡能(DarkSpy)