服务器的架构,根据游戏类型不同大多有:账号服务器、全局服务器、网关服务器、场景服务器、中心服务器、存储服务器,配合其他的服务器(比如日志服,监控服等)。传统的游戏是单服模式,现在也有很多的是分布式模式。
单服模式:就是一组服务器为一个服,与其服务器之间不互通的。比如传统的网游(魔兽世界),客户端看到的服务器列表里每个服都是一组单独的服务器,之间数据不共享。
分布式模式:理论上可以无限扩容,可能有万人同服的情况。但实际上是有上限的。这个要根据服务器的逻辑设计,和硬件决定的。分布式的思想就是服务只是一个概念。一个服务可以是一个进程分布在不同的硬件服务器上,也可以分布在相同的硬件上,也可以多个服务在一个进程内部。服务的业务逻辑可能是一个场景,也可能是一个玩家的业务逻辑,都可以的。这样可以无限扩展,业务逻辑之间的通信只要找到对应的服务逻辑地址就行了。
每一个服务器的作用:
账号服: 提供账号注册登录验证流程。这个一般多线程,因为业务逻辑没有交互,注册账号,验证账号,以回调方式返回信息就好了。(可能多组服务器器共享一个账号服)
网关服务器:这个是所有客户端连接的服务器,客户端不会直接连接到业务处理服务器,而是连接到网关,由网关转发消息到相应的业务处理服务器。提供路由作用,消息的加密解密也在这一层处理。(每组服务器可能有多个)
全局服务器:这个根据不同的游戏设计不一样,全局数据和业务处理在这个服务器上处理。比如棋牌游戏的话,玩家不在游戏的时候其他的商城业务可能就在这一层处理了,如果是MMO游戏的话公会服务,或者场景管理服务可以放在这一层处理。(单点,但是现在为了防止宕机也有做主从的)
场景服务器:这个如果是棋牌游戏的话可以叫房间服,传统MMO的话,就是具体的业务服务器,可能由好多个,玩家可能分布在多个场景服中。玩家的具体的场景漫游,战斗,交互大多数都在这个服务器。(会有多个场景服,每个场景服内部有可能只有一个场景也有可能有多个场景,根据人数压力来配置)
中心服务器:这个定位跟全局服务器差不多,这个要看具体的设计,哪些业务可以放进来。
存储服务器:提供存储服务,玩家的数据都会放到这个服务器上,玩家的数据不是直接的从数据库读取出来的,这个相当于数据缓存服务,内部有很多策略,保存和存储玩家的数据。尽量减少数据库的直接操作。(这个也有可能有多组,根据事实情况策略设计)
日志服务: 没啥好讲的,
监控服务器:监控这一组服务器实时信息,预警和干预一些异常情况
一般的登录流程(每个游戏都有些不同,大致一样):
1:客户端登录游戏的时候向所属渠道请求登录(渠道:游戏发行的渠道,比如腾讯的渠道,在华为手机商城上下载的就是华为的渠道,因为现在大多数游戏的账号信息都由渠道把控的)。
2: 渠道那边账号验证通过的以后向客户端发送token(这个相当于唯一的验证KEY)
3:客户端选择对应的某个服务器(比如:1区龙之召唤服务器),向其发送连接请求,这个时候会连接到对应服务器的网关。然后拿着token发送登录请求
4:服务器的登录处理所在的服务器收到网关转发过来的登录请求,会拿着这个token向所在渠道服务器发起验证,渠道服务器验证返回成功后,服务器通知客户端登录成功。
5:如果登录验证这一步是单独的账号服务器组的话,还会向客户端发送具体的区服网关重新连接到具体的服务器,这个要看服务器是如何设计的。
一般的棋牌进入房间游戏流程(场景服跟这个很类似):
1:客户端点击请求进入某个房间
2:大厅服务器(全局服务器) 收到验证通过后,发送回包,并且向所在房间发送玩家进入请求,
3:房间服务器收到消息后再次验证玩家信息,然后拷贝初始化玩家信息,向大厅发送回包,并且向客户端发送进入房间的消息
4:客户端根据另起的进入房间的消息,初始化房间界面