- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
Unity3D游戏开发之网络游戏效劳器架构设计培训(如何做一名好主程)
今天给大家讲一下如何做一个好的主程
入手
假设,我现在接手一个新工程,我的身份还是主程序。在下属人员一一到位之前,在和制作人以及主筹划充分沟通后,我需要先单独思考以下问题:
1、效劳器跑在什么样的操作系统环境下?
2、采用哪几种语言开发?主要是什么?
3、效劳器和客户端以什么样的接口通讯?
4、采用哪些第三方的类库?
除了技术背景之外,考虑这些问题的时候一定要充分考虑工程需求和所能拥有的资源。
我觉得,先不要想一组需要几台机器各有什么功能这样的问题,也不要想需要多少个daemon进程。假设就一台效劳器,就一个进程,把所需要的资源往最小了考虑,把架构往最简单的方向想,直到发现,“哦,这么做无法满足筹划要求的并发量”,再去修改设计方案。
操作系统:越单一越好。虽然FreeBSD的网络性能更好、虽然Solaris非常稳定,但选什么就是什么,最好别混着来。前端是FreeBSD,后端是Solaris,运营的人会苦死。也不要瞧不起用Windows的人,用Windows照样也能支持一组一万人在线,总之,能满足筹划需求,好招程序员,运营本钱低是要点。不同的操作系统有不同的特性,如果你真的对它们都很熟悉,那么必定能找到一个理由,一个足够充分的理由让你选择A而不是B而不是C。但做决策的时候要注意不要因小失大。
ProgrammingLanguage:传统来说,根本都是C/C++。但是你也知道,这东西门槛很高,好的C/C++程序员很难招。用Perl/Python/Lua行不行?当然可以。但是纯脚本也不好,通常来说是混合着来。你要明白哪些是关键局部,我是说执行次数最多的地方而不是说元宝,这些必须用性能高的语言实现〔比方C/C++比方Java〕,其它像节日活动这样很久才执行一次的,随便吧。脚本的好处是,可以快速搭原型。所以,尽早的,在你做完根本的地图和战斗模块之后,立马跑机器人测试吞吐量。这时候工程开发进度还不到10%,不行就赶紧改。
此处特别举个例子就是JavaGC的问题。既然你要用java,而jvm需要通过执行garbagecollection来回收内存,而garbagecollection会使整个应用停顿,那你不妨试一试,内存在到达峰值的时候会停多久?筹划可以接受吗?如果不可以,你可以采用其它的GC策略再试一试。这个问题应该不是Java独有的。网游和网站应用相比它很注重流畅性。这是你务必需要考虑的。
至于选择什么样的脚本语言,以及脚本在你的游戏中究竟是占80%还是20%?需要根据需求来看。有没有游戏完全不用脚本?有。有没有游戏滥用脚本?也有。如果你引入脚本的目的是因为筹划不会C/C++而你希望筹划能自己独立实现更多的游戏功能。你希望筹划去写脚本?脚本也是程序,筹划写的脚本难道就比程序员写脚本好?还是因为筹划工资廉价?筹划因为脚本写错了导致大故障还少吗〔此处特别以网易的产品举例〕?综合权衡下,还是算了吧。问问你一起工作的程序员哥们儿,他们最喜欢什么语言,什么用起来最顺手,就用什么当脚本。注意不光要考虑开发速度快,还要考虑调试方便。
总体来说,操作系统和编程语言的选择,随大流即可。标新立异没什么好处。小地方的实现你可以玩玩,整体还是要越保守越好。
通信
然后说通讯的问题。效劳器和客户端怎么连接上的?
往最下面看,物理和链路层。有可能是以太网,有可能是ADSL,在北京还有很多像歌华宽带这样的采用75欧同轴电缆或者电力线上网的。你不要企图在这一层做什么优化,你要充分考虑的是不同的网络传输媒质网络延迟不一样。更恶心的是你正常的数据包可能会被某些网吧的SB路由器当做P2P数据包给封掉,或是甚至被解析成Wake-On-Lan这样的含义。杨建还会给你讲,什么是MTU,把数据包限制在多大才能尽量让请求在一个包内发完。是的,这些很精细的东西,等咱游戏做的差不多了再慢慢研究。先略过。
往上看,IP层。再往上,你要考虑用TCP还是UDP或是二者混合。UDP的优势是overhead小、延迟低,典型的用例就是《天下贰》,据说是纯UDP。再比方《龙之谷》,据说是有小局部是UDP。负面的一点呢,就是它太过于简单所以用起来太过于复杂。你要是对自己没信心,TCP吧,随大流就好。
往上,采用什么样的应用协议。大多数rpc协议都是既支持TCP又支持UDP的。我所用过的有sunrpc、corba、webservice、json、javaRMI以及一些专有协议。如果你有精力,还是自己搞一套吧,网游所用的东西,还是越专有越好,给抓包做外挂的人加一点门槛。这里非常强调的一点,你采用什么样的序列化方式与你采用什么样的网络协议是无关的,你的应用协议和你传输协议应该也是无关的〔既支持TCP又支持UDP的〕。如果做框架
文档评论(0)