码迷,mamicode.com
首页 > 其他好文 > 详细

游戏服务器框架

时间:2015-05-25 16:52:39      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:

器框架

——蔡 C++器开工程(caijianbin668934@163.com)

简单的服器莫于在一个while里面不停地accept新的sockset,然后做相理。然个人是比推崇简单的事物,简单才是极的复杂。但是如果那样做,在实际应用中就难免不适用。

所以,在不把服务器变得十分复杂的前提下,一步步地从一个while循环拓展为能够适用于实际情况的服务。

首先,先确定下游戏服务器的类别,玩游戏的时候一般操作都是点击客户端某个地方,然后等待相应的反应,这种就是应答式服务器(C/S)。应答式服务器核心部分,就是消息通信,需要双方指定要一套协议,然后客户端发送相关的协议ID,以及各种数据,这些数据我是通过Json包来装载。接着服务器接收到消息后,解析Json包,然后做相应的处理,再根据情况需要返回一个结果给客户端。

然后,按照游戏逻辑来将整个while循环服务器划分为若干个能够异步通信的服务器。

玩游戏的流程一般都是这样:注册游戏账号->登陆游戏->玩游戏->退出游戏。这个基本流程可以分为两个功能:管理账号信息和处理玩游戏的逻辑,那么就按这个逻辑将一个while循环服务器划分为两个while循环服务器,分别是登陆服务器(LoginServer)和逻辑服务器(LogicServer)。如图1所示。

技术分享

1 器和逻辑

接到LoginServer行注册、登等功能,LoginServer把玩家的号信息保存到数据中。玩家登陆成功之后,LoginServer就通过服务器间的中间层,将玩家的Socket、玩家账号、角色ID等等基本信息发给LogicServer,那么LogicServer就能够发消息给玩家了。而玩家每次要发消息给LogicServer得先把消息给LoginServer,由LoginServer转发给LogicServer,毕竟玩家连接的服务器是LoginServer而不是LogicServer,所以也只能这样了。LogicServer就负责游戏的业务逻辑实现,以及将玩家在游戏过程中产生的数据保存到数据库中。

(注:关于服务器如何与数据库通信,这里简单讲一下。我用的数据库是MySql,服务器是用C++写的,MySql提供了C接口,供程序调用,调用相关接口就能够连接到数据库,并且往数据库读写数据。)

接着,在仔分析,如果在LogicServer中直接访问数据,也就是有理数据保存的作。那么业务逻辑时间在人数多一点的情况下肯定不了,这时候就应该把游数据管理的功能分出来,由另外一个服器(DBServer负责LogicServer注于业务逻辑实现,一旦有数据需要保存,就消息DBServer它把数据保存到数据中。现阶段服器如2

技术分享

2 分离游数据管理功能

现阶暂时没什么问题了,但是如果仔思考LoginServer的功能,是否得消息转发的功能不适合放在数据管理号的服器呢?而且,直接操作数据的服器呈现给端是否会引起安全危机呢?以上两个问题是肯定的,所以,了解决问题,需要引入一个能承担消息转发功能以及保证信息安全的服务器。在日常上网时,有“网关”这么一个东西,负责的事务很符合我们的需求。因此,引入一个网关服务器(GatewayServer),将LoginServer的消息转发功能分离出来,并在与Client连接时判断玩家的信息是否正常,不正常的均不给于登陆。引入网关服务器后的架构图如图3所示。

技术分享

图3 添加网关服务器图

在整个服器的架构接近完美了,但是少了点西,如果服器在运行中出问题了,怎么判断哪里出问题了呢?问题回溯怎么做?了解决问题,需要引入一个日志服务器(LogServer),用来记载服务器的日常操作。最终服务器的架构如图4所示。

技术分享

4 器完整架构

个服器架构是比较实用的,逻辑处理均在各自的while中,可以看成是单线程服器,避免了多线程服源而消耗时间问题,实际实用情况也表明安全性和稳定性都不错。缺点就是并量不足,多个用注册登录时,会有登不上的生,在新开服的前几天,该现象比较严重,可以利用负载均衡技来解决问题

既然提到负载均衡技,那就便就提一下DNS负载均衡(负载均衡技术的一种)。开启多个LoginServer用于理大量玩家注册登业务,添加一个DNSServer,用于管理多个LoginServer,判断当前负载最小的LoginServer,然后将事务处理分发给该LoginServer所有LoginServer负载均保持在一个平衡状DNS负载均衡如5所示。

技术分享

5 DNS负载均衡

这篇文章只是简略地介绍服务器的架构,以及负载均衡技术,也算是对这个月在服务器方面的学习总结,至于各个模块的详细讨论,会在后续逐渐写出来。

游戏服务器框架

标签:

原文地址:http://my.oschina.net/chrisforbt/blog/419664

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!