网站地图    收藏    合作   

主页 > 游戏引擎 > 服务端游戏 >

(转)一个手机游戏服务器的架构

来源:未知    时间:2017-05-26 15:07 作者:xxadmin 阅读:

[导读] 摘要:每个公司的游戏类型不同,服务器架构也就不同。新手,可以根据别人的架构获学习和认识一般的游戏服务器都有哪些功能和设计,入门者可以根据别人架构获得一些灵感和启发,...

摘要:每个公司的游戏类型不同,服务器架构也就不同。新手,可以根据别人的架构获学习和认识一般的游戏服务器都有哪些功能和设计,入门者可以根据别人架构获得一些灵感和启发,补充自己架构的不足。总之,这是一个相互学习的过程。下面是一个手游的服务器架构,供大家玩味一下
  

         说起来游戏服务器的开发,是一个非常宏大的命题。到如今谁也说不清楚服务器到底是一个什么。无非就是游戏逻辑计算,数据存储,高并发之类的话题。服务器架构更是众说纷纷,其根源在于,没有放之四海而皆准的架构。每个公司的游戏类型不同,服务器架构也就不同。新手,可以根据别人的架构获学习和认识一般的游戏服务器都有哪些功能和设计,入门者可以根据别人架构获得一些灵感和启发,补充自己架构的不足。总之,这是一个相互学习的过程。下面是一个手游的服务器架构,供大家玩味一下。先上个图吧:

服务器架构的几个模块:

         1,登陆服务器

         2,逻辑服务器

         3,用户中心服务器

         4,充值服务器

         5,数据库服务器

         6,日志服务器。

这些模块都是分开的,可以分开部署到不同的物理服务器上。

1 登陆服务器

         负责处理玩家登陆的请求。一个登陆服务器对应多个游戏逻辑分区。当玩家登陆的时候,登陆服务器向用户中心服务器发送登陆信息。请求对登陆信息的验证。通过验证之后,返回分区地址,之后,客户端与登陆服务器断开,连接到游戏逻辑服务器。

2 逻辑服务器

         对玩家的操作进行逻辑处理。逻辑服务器是整个游戏的心脏。它的工作效率直接影响玩家在游戏中的体验,所以对它的要求就是速度,速度,快速返回处理结果。为了达到满足要求的速度,逻辑服务器的大部分操作必须在内存中操作,避免IO操作,IO操作可以放到另外的线程中进行。说是大部分,是因为玩家在第一次登陆的时候可能会从数据库加载所要用到的数据。在图中,大家看到了缓存,缓存的作用就是把数据放在内存中。当玩家退出时,它的数据也会在缓存中保存一段时间,在一定时间内,玩家再次登陆,将不会再重新从数据库加载数据。在逻辑服务器中对数据库的操作可以先放入一个队列,一个线程负责从这个队列取数据,并发送到数据库服务器,这样即减轻了逻辑服务器的压力,也保证了数据处理的效率。逻辑服务器的日志也不在逻辑服务器入库,同样的发送到日志服务器处理。还有一种方法是以一种特定格式的方式,记录到本地文件中,再启一个进程,读取这个文件,然后入库。

3 用户中心服务器

         现在很多游戏都对用户进行了集中管理。这方便了对用户提供更好的服务,比如充值,活动,礼包领取,新游戏导入用户等。有的游戏公司可能会用用户中心的数据发展游戏运营平台。这部分与游戏逻辑服务器分开,也减少了游戏逻辑服务器的压力。

4 充值服务器

         充值是游戏收入的唯一方式了,所以这个功能必须流畅,毫无压力。如果由于网络或服务器性能原因,导致玩家充值不了,会直接影响收益的。所以充值服务器最好部署在一台单独的物理机上面。也可以多个分区使用一个充值服务器,这要视游戏人数而定。

5 数据库服务器

         负责对数据入库及更新的操作。把这部分操作从逻辑服务器分离出来,就是为了减轻逻辑服务器的压力,减少逻辑服务器资源的占用。而且,如果逻辑服务器突然宕机的话,也能尽量保证数据丢失的少。为了保证对数据的更新是顺序性的,这里把数据入库的操作使用队列单线程化。

6 日志服务器

         处理玩家日志的入库。日志入库方便游戏运营管理游戏,统计玩家信息。当玩家人数比较多的时候,日志也会占用很多资源。所以把日志从逻辑服务器也分开了。因为日志只是插入操作,所以可以开几个线程进行并发插入到数据库。线程数要根据你数据库的连接池的最大连接数进行设置。要不然会导致连接资源被占完。导致数据插入不了数据库。


自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论