Sun公司开源游戏服务器Project Darkstar Server——(Sun game server , 简称 sgs)学习笔记(二):多人游戏

1.1 多人游戏

   
你对于多人在线游戏一定有着绝妙的创意。可能它是一个虚拟的世界,源自于你超级喜爱的电视节目中,或者它干脆就是一个你和你的朋友们拥有的在线保龄球联盟。无论如何,真正急待解决的问题在于,相对于奇思妙想来说,真正构建一个大型的多人在线网络游戏,它竟是如此的复杂,以致于许多具有天马行空的伟大创意 最后却只能在历史的车轮中无奈地烟消云散。Darkstar解决了这个棘手的障碍,它提供了一组易于使用的功能库,帮助你处理网络游戏开发过程中所要面临 的复杂的、充满挑战性的每个方面。此外,它还致力于提供一个健壮的、稳定的、可弹性伸缩的服务器。使用Darkstar, 你可以很快地把你的美妙创意转变为实实在在的游戏。

   
电脑游戏在过去的十年中取得的重大进展之一就是,多人在线网络游戏取得了爆炸式的发展。从大量的多人在线角色扮演游戏(MMORPG)创建了不计其数的虚 拟世界(甚至是太阳系、宇宙……)让玩家去冒险,到人们可以通过网络互相进行国际象棋的对弈、玩扑克牌、或者其他传统的游戏,通过网络进行的方式广泛地影 响了我们正在玩的游戏以及我们以及在游戏中的伙伴与对手们。多人游戏提供了无与伦比的体验,尽管人工智能(AI)可以做到很多事,但是与通过网络跟实实在 在的人类对手进行互动和游戏相比,这样的挑战与获得的愉悦,是AI所无法复制和达到的。

   
然而,尽管有着这样的历史,基于服务器的多人游戏到目前为止,也仅仅是许多游戏公司的部分业务而已。这在很大程度上是由于,与此相关的大量资源和专业技 术,存在一个相当基础也是相当重要的壁垒----创建一个成功的并且健壮的多人网络游戏环境。你可能会有一个伟大的游戏构思,但是却并没有相关的专业技术 来开发它,或者有足够的资源来支撑数以千计的蜂拥而至的游戏玩家。如果这时候,有人致力于这个困难的工作,并制作了一系列工具使得多人网络游戏更加容易地 开发,这难道不是件很棒的事情么?而且,随着越来越多的游戏玩家进入到你的游戏中来,如果通过此工具制作的游戏能够更加容易更加快速地进行响应,不也是件 很棒的事情么?Darkstar,一个针对多人在线游戏的应用服务器正是用来帮你实现这些愿望的,而且它其实能做更多的事。Darkstar让你从创建一 个可以支持许许多多通过因特网加入到你的游戏中来的、一个企业级服务器解决方案的复杂任务中解放出来,取而代之的是,你可以专注于另一个非常重要(当然, 也是非常有趣)的部分:创建更加出色的游戏体验!

   
那么,Darkstar是怎么做到这些的呢?Darkstar是一个用来创建多人游戏的应用服务器。它为游戏的开发者们提供了一系列的功能函数库,这些库 实现了开发一个多人游戏所需要的基础。同时它还提供了一个健壮的、高可靠性的、随着用户不断增长可弹性伸缩的应用服务器架构。本手册撰写的初衷,便是要探 究Darkstar游戏服务器的细节,展示一些关于如何使用Darkstar创建结构完整的多人游戏的相关过程。

1.2 多人游戏的体系结构 

    
乍一看,网络多人游戏貌似是一个极度复杂的软件系统。其实不然,事实上多人游戏就相当于一曲由许多相互有关连的简单组件有机组成的管弦乐曲罢了。本章将要 讨论的是,一个针对多人游戏的通用的、高级的体系架构。 虽然每个游戏的各自实现都会有些许不同,但是这个通用的框架提供了一个统一的体系,适用于理解多人网络游戏。本章描述了计算机游戏经典的客户端-服务器架 构。尽管点对点(P2P)游戏已经成为了许多学术研究的课题,然而这些技术至今未得到广泛的应用,并且它们也不被Darkstar所支持,因此它们不在本 手册的讨论范围内。

     
多人网络游戏存在着不同层次的抽象。最高层的抽象概念即为客户端与服务器。每个客户端维护单独的游戏中各玩家间的交互信息。服务器作为所有客户端进行交互 的中间媒介并且担当游戏的规则仲裁者的角色。在任何一个多人游戏中,都存在着许多不同的角色(即“多人游戏”中的“多人”)。每一个角色都至少对应着一个 现实生活中的玩家,他们通过运行在他们电脑上的客户端应用,以键盘、手柄及鼠标等各种方式进行交互。这些客户端把各自的交互信息(即行为)轮询提交给所在 网络中(本地网或Internet)的服务器。游戏服务器通过维护整个游戏世界中的当前的、完全的游戏状态来管理这个游戏。

     
在游戏的单次轮询中,游戏服务器接收来自每个客户端的行为,并根据游戏规则对这些行为进行仲裁和应答,同时将游戏的状态更新返回给客户端。一收到新的游戏状态,客户端将立即显示它们同时准备接收新的用户行为。因此,一个游戏循环的基本算法流程是这样的:

1
、 客户端连接服务器
2
、 客户端 从服务器接收游戏状态
3
、 客户端 向用户显示游戏状态
4
、 客户端向服务器发送用户输入行为
5
、 服务器接收客户端的行为,通过游戏规则处理后更新游戏状态
6
、 服务器发送新的游戏状态给客户端
7
、 重复步骤2-6,直到客户端断开连接


客户端具有四个基本的功能特性:


1
、 用户输入
2
、 向服务器发送用户行为
3
、 接收来自服务器的游戏状态
4
、 图形显示


服务器具有三个基本的功能特性:


1
、 用户输入
2
、 运行游戏逻辑
3
、 广播游戏状态

     
服务器在一个单独的逻辑位置来聚集游戏的信息并维护整个游戏的运行状态。这项特性最为关键的地方在于,它简化了来自客户端一系列动作所导致的游戏状态更新 的相关过程。它同时也消除了客户端与服务器之间游戏状态可能存在不同步的隐患。因为作为仲裁者的游戏服务器总是正确的。这样的集中式管理也极大减少了客户 端/玩家通过各种手段进行作弊的可能性。因为是游戏服务器来执行游戏的相关规则和逻辑的,它能确保每一个玩家都要服从于既定的规则之下。

1.3 游戏的应用服务器 

   
成功编写出多人游戏存在着各种各样的挑战。这些挑战可以简单地归纳为以下四个范畴:

1
、通信
2
、同步
3
、数据的持久化
4
、网络的可伸缩性

     
前面两个部分包含了使一个多人游戏得以正常工作的基础细节。通信模块包括客户端和服务器两者之间的网络对话。同步处理模块涵盖了多个客户端同时进行访问以 及修改那些被共享的游戏状态等相关的问题。后两个部分则主要解决实现一个健壮的、高可靠性的游戏涉及到的部分。数据持久化模块确保了游戏服务器即使在当机 或崩溃的情况下也能够正常地保存和归档游戏世界的各种状态。弹性伸缩机制有助于你的游戏服务器在同时被数以千计的使用者访问时也能够保持稳定出色的表现。 这些问题都是非常重要的且是难以正确有效地实现的。总之,他们经常被认为是阻碍个人开发者或小型团队实现他们的多人游戏的最大难题。并且,正确地实现网络 通信和同步处理并不是真正有趣的部分。我们真正感兴趣的在于编写游戏!

     
幸运的是,Darkstar正是为了游戏而设计的应用服务器。应用服务器的目的,是为了提供通用的、基础功能性的(一如前文提到的包含通信、同步、持久化 和伸缩性的功能函数库)、健壮的、高效的和简单易用以便于使用者能把重心集中在实现对他们的应用的功能性特性上面(一如你的游戏!)。由Darkstar 应用服务器提供的基础功能可以让个人开发者把重心集中在他们正在开发的游戏上面。Darkstar应用服务器可以帮助你在很短的时间内快速地开发一个健壮 的多人在线游戏。此外,它还确保了你的程序在面对大量玩家的时候能够保持高度的伸缩性。

posted @ 2009-11-25 17:41  木瓜网络  阅读(1927)  评论(0编辑  收藏  举报