游戏服务器和web服务器有哪些地方不一样
2022-07-19 15:16:38 【

游戏服务器对延迟要求苛刻,一个网站,延迟是500ms还是1s无关痛痒,用户的操作不会很频繁,往往点击一下就能看上一会。
但对于游戏,尤其是FPS类型的游戏,150ms以上的延迟都会使游戏体验大打折扣,客户端发往服务器的请求一秒钟内往往有十几个之多,微服务那种调用链的开销,绝大部分的游戏都承受不起。
像MMO,MOBA,FPS这种实时性要求高的游戏,服务器的帧率在10hz到60hz,一秒钟更新最少10次,每一次更新大约几十(moba,fps)甚至几千(mmo)个unit,留给每一个unit的处理时间最多几毫秒甚至几微秒,而同个数据中心内一个roundtrip time平均就要0.5ms 游戏服务器的用户之间,具有高度的交互性,状态性极强。web服务器的用户与用户之间,你操作你的我操作我的,你我之间没关系。
在数据库之上这一层,用户之间同步数据以及顺序性的需求几乎没有。
如果有,那也是在数据库,缓存这一层,比如事务操作一下,缓存同步一下即可。web服务器天然的无状态性,弱状态性适合横向扩展,做分布式。同一个用户的不同请求,往往可以由负载均衡路由到不同的服务器处理。而游戏很难做到这一点,往往都是通过分服,开房间等手段解决。
游戏服务器的数据库数据,具有高度的反范式特点。从用户登录后,基本上用户的所有数据都需要load进内存中。
不像web比如购物网站,登录后,只需要用户名和购物车中物品数量。点开购物车,加载购物车数据。点订单,加载历史订单。每个服务都有自己的数据库,服务自身保证数据的invariants,数据库之间通过最终一致性达成一致即可。
游戏不一样,不可能等到你被砍的时候再去数据库里把你的装备读出来算一下防御力看看该扣多少血。元数据依赖。
游戏的用户数据,可以说是高度依赖元数据,你的装备属性,外形,技能效果等等都是依赖策划配置出的数据表(元数据)。而web服务器其实没有所对应的这一层的的元数据。
一般说到web服务器元数据,基本都是描述服务之间的契约,比如RESTFUL API的JSON定义等。 游戏服务器对元数据的依赖是全局性的。
假如有一个微服务化的游戏,想削弱某职业的技能而不重启其他服务比如战斗服务?绝无可能。因为上面几点原因,数据都是保存在进程内的。没有统一的框架。
游戏玩法多种多样,即便是同一种类型的游戏,也可以是脑洞大开,很难抽象出一个行业内可复用的逻辑流程然后再通过框架去做事情,比如spring那一套。

】【打印关闭】 【返回顶部
上一篇没有了 下一篇云服务器配置参数怎样确定