1.2.1 单体游戏服务器架构

单体游戏服务器架构,即运行一个游戏服务实例为游戏提供服务,游戏所有的功能实现都集中在同一个服务之中,游戏客户端通过网络直接连接游戏服务器,与服务器直接进行数据交互。很明显的是,这种架构同一个服务器支持的同时在线用户数量有限。如果用户数量接近或超过单体游戏服务器的承载量,就需要部署新的服务器,也叫作分区分服,即一个区一个服务器。每个区的同时在线人数设置一定上限,而且各个区中的游戏用户是隔离的且不会产生任何交互,单体游戏服务器架构如图1.1所示。

图1.1 单体游戏服务器架构

这种架构的优点如下。

●易于开发:开发人员不需要进行太多的设计,就可以快速开发业务功能,而且不会有过多的异步调用。

●易于测试:由于所有的功能都在一起,不需要依赖其他的接口,测试起来非常容易。

●易于部署:由于所有的功能都在一起,部署时只需要启动一个进程即可,更新服务时只需要简单更新一个运行包即可。

●易于维护:由于代码层次明确,所有模块在同一个项目中,修改时容易发现错误,可以快速改正。

但是缺点也是显而易见的。

●安全性差:由于客户端与游戏服务器直接连接,暴露了服务器的地址和端口,如果遇到攻击就无回还余地。

●灵活性差:由于所有的功能堆积在一起,团队在开发中可能会产生冲突,导致代码提交延迟,需要花费时间解决冲突。

●没有伸缩性:所有服务都在一个进程,承载量有限,毫无伸缩性,不能扩展。

●体验性差:修改一个功能的bug,必须重启服务,使所有用户下线。

由此可见,单体游戏服务器架构适合一些功能不多的小游戏或同时在线用户数量有限的游戏,这类游戏一般在运营的时候是分区分服的。注册人数或同时在线人数达到一定限度时,就开新的区服(游戏区服务器),这样会导致一些旧的区服的用户会越来越少,为了节约资源,后期会进行合服操作,即把不同区服的用户数据合并到一个数据库里面,不同区服的用户客户端连接到同一个服务器。