游戏服务器架构设计细节

前言

一般而言入行做游戏都是在现成的代码上进行增加,修改功能,很少有机会自己去完成一个游戏服务器的设计,一些小公司可能会有这样的机会,一般也会找现成的直接开发。为了修炼内功,怎么自己做个游戏服务器需呐,今天稍微探讨下

1、服务器架构

万丈高楼平地起,先把骨架做出来,打好地基才能起高楼,所以在开始前需要先设计架构,这种稍微有点经验的同学都知道怎么做。

这次的目标是一个卡牌服务器,所以设计如下。

解释下各个服务器和中间件的职责

client 就不多说了,代表客户端, 可以是各种技术开发的客户端。

Gate 这里作为网关服,也是做负载均衡的地方,玩家可以在这里选择登录的服务器,也在这里登录和创角。

Room 也是战斗服,玩家匹配战斗后会送入Room服,在战斗结束后再返回Game.

Game 主要的业务逻辑发生的地方,比如卡牌的获得和卡组的创建,升级等等主要逻辑。

2 技术选型的依据

服务器技术的选型基本上是根据自己的语言使用经历,选择自己最熟练的语言,然后选择对应的实现。

在手游最火爆的那几年也看到好多PHP写的服务器,

很多老的游戏公司会选择C++就是历史遗留问题,因为那些老家伙只会用C++,不过现在很多公司会使用Java,Golang

等新一代编程语言,生产效率高,招人方便。

因为我这么多年一直在使用Java,虽然也写过几年C++,但是还是不太喜欢,也用的不熟练。可以说Java 是我的原生语言。

3 Java服务器的技术

3.1 通信框架:websocket

这里选择websocket 主要是因为要做一个卡牌网页游戏,这个是甲方的要求,所以肯定选择使用websocket通讯。

当然如果你是做手游可以自己切换通讯协议,比如TCP,UDP ,Java中高效的网络通讯框架使用Netty是首选。

Netty对tcp和udp都有很好的支撑

3.2 框架系列:springboot, spring data jpa, spring security

做Java的绕不开Spring,Springboot现在是最方便的开发框架,整个框架的选用Springboot系列也没什么好犹豫的。

Spring data Jpa 操作数据库很方便,对于复杂的Sql 直接使用 template,提高生产效率。你可以选择mybatis我不会鄙视你,我不喜欢。

Spring Security 用来控制GM接口的访问,只要加个包,简单配置就可以做权限控制。别想太多,直接冲。

3.3 组件系列:easyexcel ,dubbo,jetcache,akka,fastjson,protobuf

EasyExcel 是用来加载基础数据Excel的,读取Excel到内存中,效率高,省事,最主要Excel这个对于策划和程序来说很友好,很容易发现问题。

dubbo 用来做服务器内部之间远程调用,简单直接,不用配置

jetcache 主要是用来作为缓存使用,因为游戏的数据库访问很多,如果不加一层缓存对数据库来说压力很大。

akka 主要是用在房间服,一个房间对应一个actor,不需要考虑多线程问题,简单暴力。

fastjson 是为了在访问redis时候进行序列化,可以保存一些排行榜数据,方便排序。

protobuf 是用来和客户端进行通讯,效率高,省事,通用。

3.4 中间件:mysql ,redis

mysql 做玩家数据持久化,大部分的游戏公司都用这个,其实这里选择使用MongoDB也挺好,我懒得切换了。主要是后期做业务升级比较方便,MongoDB还没试过。

redis 基本上主要是为了解决缓存问题和跨服数据问题,总之应该有用。

3.5 容器组件: docker docker-compose

21世纪了,当然上容器了,docker和docker-compose 对于游戏来说太完美了,简单省事。

对运维来说也省心,两全其美。

4、总结

游戏架构的设计其实没那么难,都是行业通用的架构,只是实现细节你需要自己去掌握,如果你在工作中多加留心,相信在游戏行业中待个几年都可以搞定。

遇山开山,遇水架桥,没有完美的事情,先解决首要矛盾,再解决次要矛盾。

先起飞再调整姿势,冲啊。

猜你喜欢

转载自blog.csdn.net/perfect2011/article/details/132812689