站务联系

当我设计游戏服务器时,我在想些什么?(2)

发布时间:2021-03-11   来源:网络整理    
字号:

半年前我参与了一个手游项目,第一次才能主导整个游戏的设计,这篇文章单说服务器的构架,客户端就不提了。

对于服务端,我想从之前的端游服务器改进来肯定是走不通的(详见:),因为手游的开发周期比端游短太多,上面那一套构架开发了5年不止,当然,期间推翻重做了很多次。而这个手游项目只有快则6个月,慢则10个月的时间。

既然决定不用端游的构架,一切从0开始,那么迅速搭建起一个可用的服务器是我考虑的第一个原则,第二点就是我做为程序员的一点私欲,尽量使用原先没有用过的技术,这样自己才能接触更宽广的世界。

首先其实还要找找看有没有现成的轮子,我花了1个月的时间,去找寻github上这些不错的开源构架,其中有两套系统我感觉太有潜力,一套是网易的pomelo,另一套是云风的skynet。其实我首先晓得的是skynet,因为始终关注云风的博客,所以他的这个服务端我还是有所了解的,我花了一周的时间具体阅读了skynet的wiki,并上手安装了skynet,又写了几个简略的http通讯的实例,然后仔细剖析了一下skynet中c模块的写法,甚至连假如要使用skynet,我的后台布署图会是什么样的都画好了,不过最后还是舍弃了skynet,理由是当初早已确定了后端会用cocos2dx+lua的组合来写,我太想尝试瞧瞧,客户端跟服务端的脚本语言不同会是个哪些样子,同时,我还认为,云风用c的消息队列,我还吃不透,而且那时skynet的用户还不多,没有先驱可以参照,skynet原本也还没有稳定出来,云风是个精力充沛的家伙,更新速率很快了。现在skynet早已公布了1.0了,下个游戏很有可能我会用它。

然后我发觉了node.js,其实也不能说是我发觉的,公司有大师早已开始用node.js做游戏了,我那时比较好奇,于是看了一下nodejs的网站,又看了下网上的言论,觉得这货很神奇,单线程的丑闻驱动,感觉比较简略。接着pomelo就踏入了视野,我竟然发觉网易开源了一个nodejs写的游戏服务器构架,真是喜从天降,我花了2周时间搭建,学习,测试pomelo的各类使用方式,用它copy了一个网上的聊天室代码,期间遇见这些问题,我提的issue基本上没有人问津,加入pomelo开发的qq群开发者只是寥寥无几,而且网易的人问题回馈的速率使人哭,并是一副高高在上,对问题不做任何解释的姿态出现的。我更改了几个pomelo的问题后就舍弃了它。但是不得不说,pomelo对我旁边自己设计基于nodejs的服务器构架帮助巨大,我有巨大一部分设计是参考了它的看法,也是它引我踏入了nodejs的世界。

在我花了将近1个月的时间,却哪些都没有收获的时侯,我决定找人聊一聊,我问问了这些大师跟厉害的同学,他们给出了这些建议跟帮助,也逐渐帮我理清了我究竟还要做哪些。但一开始写代码,我就紧张。我不想走弯路,想要一开始就走在正确的公路上,我担心走了很远,结果发觉是错的,写任何一行代码,我都压力倍增。那段时间,我悲哀,纠结,压力极大,咬舌头,我压力一大就弯曲手指脚趾,然后用牙舔手指的第二跟第三个髌骨,夜不能寐。终于有三天,我的好朋友XY说了一句话,让我恍然省悟,他说“先开始写的,后面再逐渐改,哪有一开始就设计好的系统”。这么简略的一个道理,我听过无数次,却从来没有感悟是何种意思,这次真的被振动至了,确实,我想要一开始就走在正确的路上的做法显著太天真了,而我更没有必要为走错而苦恼,举步维艰,是因为我看得不够远。

于是,我开始动手了。

之前我倒是用过js,不过仅限于用 js 和 html 配合来制做网页,这次用来写服务器,我是一点抓住也没有,首先从语言开始学起游戏服务器,我在网上看了好久的资料,最后买了2本书,一本是 crockford 的《javascript语言精粹》,另一本是朴灵的《深入浅出nodejs》,前一本是 js 中服务器要用到的那部份,js 语言虽然有三部份组成,dom + bom + 基本核心,dom是操纵页面元素的,bom 是操纵浏览器的,基本核心是语言的最基础的部份,而服务器刚好只须要这部份,crockford 的抒写的特别不错,我很快就读懂了,然后我花了几天时间整理了一份文档,专门讲解 js 语言的基本核心部份,用它来给我的另一个程序员同学讲,他从来没有用过 js,我的目标是想把他讲懂,那么我肯定就理解浅显了,不过似乎最后他也不太懂。。。

图说天下

×
二维码生成