《攻城Online》,如下简称“攻城”,是基于Unity3D引擎开发的一款MMORPG端游。数据库
“攻城”开发采用C/S架构,其中服务端使用了Photon引擎来简化开发流程。Photon引擎底层是C++,采用多线程并发处理客户端链接,且游戏逻辑采用C#语言编写。目前来讲,团队对服务端开发还是一张白纸,于是认定直接用现成服务端框架是惟一的出路。而相比较SmartFoxServer、KBEngine来讲,由于其实现语言的缘由,以至Photon成为不二的选择。缓存
废话少说,先贴上初步的UML类图框架。多线程
因为开发过程当中,类内成员的访问级别随时均可能发生变更,方法参数一样如此,于是一概忽略对访问级别以及参数的表示。架构
首先是服务端主框架,ApplicationBase和PeerBase是Photon提供的两个类。ServerApplication继承自ApplicationBase,用来进行服务端游戏逻辑应用程序的工做,ServerPeer继承自PeerBase,表明链接到Photon的客户端,每当有一个新的客户端链接到服务端时,就会自动实例化一个peer,这个类就用于与客户端进行通讯。其中,类中的OnOperationRequest是个回调方法,用于处理客户端发送的请求。并发
UserBase类包含用户的基本信息,而UserCollection类经过字典来收集每一个peer的用户信息。框架
DataBase包,用于数据库操做和管理的,这个确定要。spa
此外,还有ServerLogic包,内含一些处理游戏逻辑的文件,用于分割peer中OnOperationRequest所要进行的工做。线程
Protocol包下是服务端和客户端之间的协议文件。日志
因为Photon引擎有很方便的日志管理功能,于是还须要一个Log包,用来进行各类日志记录。blog
接下来是客户端框架,PhotonSingleton是个全局单例类,用于进行每帧保持与服务端的链接等工做。
PhotonService是客户端的主体部分,发送请求和接收响应和事件都在这里完成。
一样,ClientLogic包用来细化PhotonService的各项逻辑工做。
最后是Protocol包,里面含有各种操做枚举,EventArgs事件包,Common数据包,以及一个Serialization类用于进行二进制数据传输的转换。另有一个EventCollection类,这个类将各类事件集中起来,在PhotonService中会引用到。
以上就是基本的组成框架,剩余的都是些细化的部分。
说下这个框架的基本使用思路:
服务端启动->客户端启动->
客户端链接服务端生成peer->服务端保存用户信息缓存->
客户端逻辑生成请求->二进制序列化请求数据->客户端发送请求->
服务端接收请求->二进制请求数据反序列化->服务端逻辑处理请求->
服务端逻辑生成响应->二进制序列化响应数据->服务端进行单播/组播/广播->
客户端接收响应/触发事件->二进制响应/事件数据反序列化->客户端逻辑处理
这就是整个消息收发的处理过程,其中省略了数据库、日志、更新游戏画面等操做。