如何设计属于自己的游戏服务器(一)

最近一直在做开源服务器的优化以及新功能的添加,不止一次有人在群里问我,你的这个PSS做游戏服务器怎么样?
确实,我也考虑过这个问题。无论自己的水平如何,好歹也在网络游戏服务器开发上走过8个年头了,从当年台湾第一的游戏橘子,到后来的自主创新的硅谷,到后来的搜狐,后来从搜狐出来又进入创业公司。
一步步的走来,很想写的什么。
最痛彻心扉的失败的游戏经历过,最激情的成功的游戏,海量玩家涌入的通宵也疯狂过。
看到很多做技术的朋友,对游戏还是趋之如骛,尤其是初学者,我想说,在你们开始你们的游戏服务器设计之旅之前,好好的让自己平静一下。
如果你不是为了争分夺秒或者急于成就自己的游戏,希望你可以静下心来读一下以下的文字。
在我这里,我会慢慢结合我的PSS来解释如何做一个,让你自己骄傲的游戏服务器。
前提是,你需要先静下心来。把以下的文字,转化为自己的故事。
这里,我并不会列举太多的代码。
因为我认为最不重要的,就是代码。
我会讲一系列的故事,希望这些故事,让你不断的从中吸收到属于你的东西。
诚然,当年的我,误打误撞的进入了网络游戏行业,说来也很奇怪,2002年的我毅然决然(或者说傻里傻气)从我的第一家任职的公司辞职,当时已经做到了公司的技术一把手。
但是不知道为什么,心里一直觉得这不是我的归宿,也没想这么多,就出来了,经历了三个月的煎熬,才知道自己的自大和无知。以为自己知识基类已经可以了,结果发现在别的项目上什么都无用。
于是明白了一个道理,任何时候,只要你敢于从零开始,永远会有所获得。
第一次参加游戏服务器的时候,并非我想的那么简单,虽然我已经做好了艰苦奋斗的准备,但是实际的考验还是大大的超出了我想象。
我和当时很多初学者一样,在网上大量搜索,大量买相关书籍,也经常问一些现在看来无所谓的问题。
后来慢慢的开发中发现,其实游戏服务器设计有几大误区。
你最不应该关心什么?
(1)现在网上很多的文章,尤其是关于游戏服务器的,都把网络IO讲的神乎其神,似乎socket效率就是服务器的一切,如果你读到这些文章,大可以建议你不用读下去了。
因为,网络IO是最成熟的,也就是说,代码换来换去就那么几行。如果作者用超过50%的笔墨再讲这些,只能说明作者本身对游戏服务器设计开发能力有限或者根本不想告诉你游戏服务器的设计核心在哪里。
实在是没必要浓妆艳抹,无论IOCP,epoll,还是kqueue。这不是你关心的事情,只要知道到时候用到的时候到哪里找例子就行了。
(2)数据库,这部分也不需要太多的介绍,因为数据库本身只是一个存储介质,用文件,用NoSQL,用DBMS,甚至用内存,这些都只是数据存于长久介质的一种方法。
数据库技术一样成熟,样例代码满天飞,不必要为此多花费精力。
(3)脚本语言,比如现在很多文章吹嘘Lua以及phthon等一些脚本在游戏服务开发中的优势,不可否认,这在某些情况下是非常优雅的。但是并不是没有这些,就做不了游戏了。
C++或者Java直接写的代码一样有优秀的游戏。
(4)网上相传的各种开源的游戏服务器,以及那些所谓“偷窃”出来的知名游戏服务器源代码。
这些代码实际完全无意义,除了多占据你的机器硬盘,没什么别的作用。因为对于初学者,在没有文档的情况下,去读动辄及万行的代码,实在是一件不靠谱的事情。
你应该关心什么?
(1)你的游戏服务器要达到什么功能?
每个策划给你的需求都不同,你要知道,你的游戏特点是什么?理解在这个特点上,我们的卖点是什么?那么,为了这个卖点,我们怎么保护核心玩家在一定程度的核心体验。
(2)服务器的初步布局如何?
你可以采用什么样的游戏服务器布局,单机,一组?还是集群?
在这个布局下,划分每个功能在每台服务器的应该完成的任务。这里先不需要去想代码。
你能够用你的铅笔和纸张画出主要数据流动方向以及服务器主要功能分布即可。
(3)你手里有什么资源可以支持你的架构?
成本非常重要,要知道商业活动,都是要最小化成本的,不可能为你的一个游戏搞个几十台服务器才支持2000人。
所以了解自己有什么非常重要。
(4)你的同伴有什么擅长的技能和技术方向?
这一点至关重要,你的下属或者同伴,如果你让他们做自己不擅长的事情,肯定会增加成本而得不偿失。
(5)你的时间预估如何计算?
如果你预计某一项功能大概需要5天/人,那么保守的估计你最好乘以一个1.5的系数,还有懂得,什么时间做什么事非常重要。给自己设置阶段里程碑。
这里只考虑功能主模块的时间。
如果你对某一项技术不熟而需要技术预研的话,这段时间不计算再开发周期内。
设计一个好的游戏服务器,需要的不止是技术,最重要的是一个好的规划。有好的规划,就是成功的一般。
代码只是实现体,实际重要程度并非主要。
如果在你的开始设计上出现了问题,那么,后期游戏服务器就会花费巨大的成本修改前期的错误。
好,下一讲,我会讲如何利用PSS去设计你的游戏服务器。
有一个概念必须先入,不要陷入代码的海洋,你应该能抽出身来,如果你不能用简单的语句描述清楚你的需要,就不要动手去实现你的代码。

你可能感兴趣的:(如何设计属于自己的游戏服务器(一))