站务联系

8 大型多人在线游戏服务器架构设计

发布时间:2021-06-17   来源:网络整理    
字号:

8 大型多人在线游戏服务器构架设计

由于大型多人在线游戏服务器理论上还要支持无限多的玩家,所以对服务器端是一个特别大的考验。服务器应当是安全的,可维护性高的,可伸缩性高的,可负载均衡的,支持高并发恳求的。面对这种需求,我们在设计服务器的时侯就须要谨慎考虑,特别是构架的设计,如果前期设计不好,最后面临的太或许是解构。

一款游戏服务器的构架都是逐渐从小变大的,不或许一下子就上来一个建立的服务器架构,目前流行的说法是游戏先上线,再扩充。所以说我们在做构架的时侯,一定要把底层的基础组件做好,方便之后扩充,但是刚开始的时侯留出一些插口,并不实现它,将来游戏业务的发展,再逐渐扩充。当然,如果前期设计的不好,后期业务扩充了,但构架没办法扩充,只能加班加点弄了。

面对庞大的数据量我们想起的惟一个解决方案就是分而治之,即选用分布式的方法去解决它。把紧凑独立的功能单独拿出来做。分担至不同的数学服务器里面去运行。而且做到可以动态扩充。这就须要我们考虑好模块的界定,尽量要业务独立,关联性低。

前期,由于游戏还要早日上线,开发周期短,我们还要把服务尽早的跑上去,这个时侯的目标应当是尽早完成检测版本开发,单台服务器支持的数量可以稍稍低一些,但是当数量下跌时,我们可以能过多开几组服务来支持新增跌的用户量,即可以平衡扩充就可以了。到后期我们再把详细的模块单独拿出来支持,比如前期逻辑服务器上包括:活动,关卡,背包,技能,好友管理等。后期我们可以把好友,背包管理或其它的单独做一个服务进程,部署在不同的地理服务器底下。我们先按分区的服务进行设计,后面在布署的时侯可以布署为世界服务器,下面是一个前期的构架图,下面我们从每位服务器的功能说起:

8 大型多人在线游戏服务器架构设计

1.3 是否在白名单内白名单是给内部检测人员使用的,在服务器未开启的状态下,白名单的用户可以提早踏入游戏进行游戏检测。

1.4 判断是否在黑名单黑名单的用户是严禁登入的,一般这是一些被禁言的用户,拒绝登录。

1.5 登陆验证服务器使用公钥揭秘密码,进行验证,如果是sdk登录,则直接向第三方服务发起反弹。

1.6 登陆兵符(token)生成当用户登录验证成功以后,服务器端还要生成一个登录兵符token,这个token具备时效性,当用户客户端领到这个token以后,如果在一定时间内没有登入游戏成功,那么这个token将失败,用户须要从新申请token,token储存在登入服务这,向外提供用户是否已登录的插口,其它服务器想验证假如是否登录,就拿那种服务收到的token来此验证。

1.7 显示用户角色信息当用户登录成功以后,显示近期登录的角色信息。

2,显示公告

用户登录成功以后,请求公告服务器,获取最新的公告,公告服务先按照token跟Userid验证用户是否已登录,公告有或许按照渠道的不同,显示不同的公告。所以 公告一定是要可以按照渠道编辑的。

3,选区服务

8 大型多人在线游戏服务器架构设计

4.2 登陆恳求收到登录恳求后,移除记录的channelid信息,向登录服务器验证用户是否已登录过,并向外广播用户角色登录成功的消息。

4.3登录成功后,接收网段的其它的消息

4.4 客户端消息合法性验证在向逻辑服务器转发消息之前验证消息的合法性,具体验证方式见合同安全验 证。

4.5将客户端消息转发送到对应的逻辑服务器。

5 通信协议

5.1合同序列化跟返回序列化可以直接使用protobuf,直接对合同进行序列化跟反序列化。

5.2合同组成5.2.1 包头构成包总宽度,加密字符串宽度,加密字符串内容,userId,playerId,版本号,内包内容。5.2.2 包体组成恳求的逻辑信息,是protobuf后对应的二进制数据。

包总宽度加密内容UserIdplayerId恳求序列id版本号内包内容

8 大型多人在线游戏服务器架构设计

64

8

8

8

4

变长

5.3 协议内容加密假如合同明文传输的话,被歪曲的风险就十分大,所以我们要对传输合同进行加密传输,由于合同内容大小不固定,为了保证效率,采用对称加密算法,首先客户端使用AES的私钥对消息内容加密(上表中userid以后的信息),客户端把加密后的信令发送至服务器端。AES的私钥在用户第一次连结时获取。

5.4 协议完整性验证虽然我们对消息做了加密,但也不是万无一失的,为了逐步确保消息没有被歪曲,我们还要对消息的完整性进行测试,使用数字摘要的方法,首先客户端对userid及后来的合同信息进行AES加密,加密然后取它的md5值,md5值适于验证数据的完整性。这个md5值会被传送至服务器,如果合同信息被更改了,那个md5都会不同。

5.5 保证md5数字摘要的值的安全为了避免违规用户更改合同内容后,模拟客户端操作再次生成新的数字摘要信息,我们对生成的数字摘要信息进行二次加密,这次使用RSA的私钥对md5的值进行加密,将加密的内容跟其它信息一起发送至服务器。服务器按照ip向登录服务器领到AES的私钥跟RSA的公钥,先用RSA 私钥取出客户端加密的md5值,服务器端估算userid上面的数据的md5值,如果两个md5值一样,说明安全的。如果不一样,说明用户是违法的,加入黑名单。因为RAS使用公钥加密,必须使用对应的公钥能够揭秘,而且不同的私钥对应的公钥不同游戏服务器,这样即使违法用户再次生成了数字摘要,在服务器端只是验证不通过的。

5.6 取出明文信息当服务器收到信令后,对信令进行数子摘要验证通过以后,服务器端使用用户自己对应的AES的私钥,解密数据,获得明文数据。为了保证安全,每个用户的AES私钥或许不一样。

图说天下

×
二维码生成