- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
轻松实现可伸缩性,容错性多人在线系统.doc
轻松实现可伸缩性,容错性多人在线系统 轻松实现可伸缩性,容错性,和负 载平衡的大规模多人在线系统 January 12, 2006, 5:00 pm Posted by senzung in General By: 神宗冥浩 简介: 本文以我的OpenPoker项目为例介绍另一种构建大规模多人在线系统的方案。OpenPoker是一个大型多人扑克网游,内建支持了容错能力,负载平衡和无限制的规模大小。OpenPoker的源代码遵循GPL协议可以从我的网站下载,大约包含一万行代码,有三分之一是用来测试的。 在Openpoker最终版出台之前,我花了很大精力设计参考,尝试过Delphi, Python, C#,C/C++还有Scheme。我甚至还用Common Lisp完成了一个可运行的Poker引擎。虽然我花了9个多月研究设计,最终代码编写却只用了6个星期,这最后的高效率要归功于选择了Erlang作为编写平台。 根据比较,老版本的OpenPoker需要4~5个人的小组9个月时间完成。原班人马还另外完成了一个Windows版的客户端,就算把这个开发时间的一半(1个半月)算进去,也比预期的18个月少得多,就当今游戏开发的客观环境,如此可观的时间节省不可小看! 什么是Erlang 我建议你先读一下Erlang FAQ,不过我在这里尽量概括一下: Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此非常适合于构建分布式,实时软并行计算系统。 使用Erlang编写出的应用运行时通常由成千上万个轻量级进程组成,并通过消息传递相互通讯。进程间上下文切换对于Erlang来说仅仅只是一两个环节,比起C程序的线程切换要高效得多得多了。 使用Erlang来编写分布式应用要简单的多,因为它的分布式机制是透明的:对于程序来说并不知道自己是在分布式运行。 Erlang运行时环境是一个虚拟机,有点像Java虚拟机,这样代码一经编译,同样可以随处运行。它的运行时系统甚至允许代码在不被中断的情况下更新。另外如果你需要更高效的话,字节代码也可以编译成本地代码运行。 请参考Erlang网站上的教程、文档、范例等精彩资源。 为什么选择Erlang 内建的并行计算模型使得Erlang非常适合编写多人在线服务器。 具有良好伸缩性的大型多人后台系统用Erlang是这样构建的:由很多被分配不同任务的“节点(Node)”组成的“集群(Cluster)”。一个Erlang节点就是一个Erlang虚拟机的实例,你可以在一台机器(服务器,台式机或者笔记本电脑上运行多个节点。我推荐一块CPU一个节点。 Erlang节点自动跟踪所有连接着的其他节点。要添加一个节点你仅仅需要把它指向任何一个已建节点就可以了。只要这两个节点建立了连接,所有其他的节点马上就会感应到新加入的节点。 Erlang进程使用进程ID向其他进程传递报文,进程ID包含着运行此进程的节点的信息。因此进程不需要理会正在与其交流的其他进程实际在何处运行。一组相互连接的Erlang节点可以看作是一个网格计算体或者一台超级计算机。 将大型多人在线游戏里的玩家,NPC以及其他个体抽象为很多并行运行的进程是最理想的,但是通常并行运算的实现让人十分头疼。Erlang天生就是简化并行计算的实现。 Erlang语法里的比特操作让二进制操作变得异常简单,极大发挥了Perl和Python的打包/解包结构。使得Erlang非常适合操作二进制网络通讯协议。 OpenPoker的体系结构 OpenPoker里的一切的一切都是进程。玩家,机器人,游戏,抬面等等等等,都是一个个进程。每一个连接到OpenPoker的客户端都有一个扮演“代理”角色的玩家进程用来处理网络消息。取决于玩家是否登陆,某些消息被忽略而有些被传递到处理游戏逻辑的进程。 纸牌游戏进程是一个状态机宿主:由多种游戏状态的各种状态机模块组成。这样我的纸牌游戏进程可以向乐高积木一样随意添砖加瓦——只要加入状态机就可以添加新的纸牌游戏。此方案可以参考我写的初始函数(在cardgame.erl里 纸牌游戏状态机根据目前游戏的状态接受不同的消息。而且我用一个独立的进城来处理通用信息,比如跟踪玩家状态,抬面情况,各种限制等等。在我的笔记本电脑上模拟27,000个扑克游戏,会产生136,000个玩家和大约800,000个进程。 这说明了为什么我极力专注于使用OpenPoker为例讨论Erlang如何轻松的实现可伸缩性,容错性,和负载平衡。此方案不仅仅局限于扑克纸牌
您可能关注的文档
- 教育技术水平考试模拟试题一、二、九、十、十一、十二.doc
- 恩施学会计好找工作么(会计实务)考试真题与答案.docx
- SQ-P无极绳连续牵引车使用说明书.doc
- 2017年描写夕阳唯美的优美句子.doc
- 新编奥数教程年级 付答案.docx
- 背单词的捷径--学无定法,学有常法(The shortest way to memorize words is to learn without rules and to learn regularly).doc
- 招标编号: 余交.doc
- 高校入学全攻略:军训不打无准备之仗.doc
- 环境影响评价报告公示:惠来县县城揭神路梅兴桥至南环一路沥青砼路面建设工程环境影环评报告.doc
- 环境影响评价报告公示:贵州省仁怀市茅台镇一九一五酒厂酱香型白酒技改环境影响报告环评报告.doc
文档评论(0)