今天大家跟随小编一起来看看游戏服务器的演进过程。
游戏服务器的特点。
游戏服务器是一个长期运行的程序,它还服务于多个不定时和不定点的网络请求。因此,这种服务的特点是特别注重稳定性和性能。如果这类程序需要多个协作来提高承载能力,也要注意部署和扩展的便利性;同时,还需要考虑如何在一定程度上满足容灾需求。多进程协同工作也带来了开发的复杂性,这也是一个需要注意的问题。
功能约束是架构设计的决定性因素。基于游戏业务的功能特点,对服务器系统有以下特殊要求:
游戏和玩家的数据存储落地。
播放和同步玩家交互数据。
在服务器上运算重要逻辑,做好验证,防止外挂。
根据上述需求特点,在服务器端,我们经常关注计算机内存和CPU的使用,以满足特定业务代码下高承载、低响应延迟的需求。最基本的方法是空间换时间,通过各种缓存方式获得CPU与内存空间的平衡。还有一个约束:带宽。网络带宽直接限制了服务器的处理能力,所以游戏服务器架构也必须考虑这个因素。
游戏服务器架构要素;
对游戏服务端架构来说,最重要的三个部分是如何使用CPU,内存,网卡设计:
内存架构:主要决定服务器如何使用内存,以最大限度地利用服务器内存,增加承载能力,减少服务延迟。
逻辑架构:设计如何使用过程、线程、协程等CPU调度方案。为了提高服务器的稳定性和承载能力,选择同步、异步等不同的编程模型。可分区分服,也可采用世界服的方式,将相同的功能模块划分不同的服务器进行处理。
通信模式:决定如何通信。根据游戏类型的不同,采用http、tcp、udp等不同的通信模式。
服务器的演变过程。
卡牌等休闲游戏弱交互游戏。
根据游戏类型的不同,服务器采用的架构也不同,我们先来谈谈简单的模型,服务器采用http通信模式架构:
这种服务器架构类似于我们常用的web服务器架构,也使用nginx负载集群支持服务器的水平扩展,memcache作为缓存。唯一不同的地方是通信层需要对协议进行再加工和加密。一般每个公司都有自己的基于http的协议层框架,很少使用开源框架。
长链接游戏服务器。
长连接游戏和弱联网游戏的区别在于,在长连接中,玩家处于状态,服务器可以随时与client互动,数据传输,不像弱联网,每次都需要重新创建一个连接,消息传输的频率和速度都比弱联网游戏快。经过几代迭代,长链接网游的架构类型日益丰富。以下是每一代服务器的特点和架构模式。
房间服务器(游戏大厅)
房间类玩法和MMORPG有很大的不同,在于其在线广播单元的不确定性和广播数量很小。而且需要匹配一台房间服务器让少数人进入一个服务器。
这一类游戏最重要的是其“游戏大厅”的承载量,每个“游戏房间”受逻辑所限,需要维持和广播的玩家数据是有限的,但是“游戏大厅”需要维持相当高的在线用户数,所以一般来说,这种游戏还是需要做“分服”的。典型的游戏就是《英雄联盟》这一类游戏了。而“游戏大厅”里面最有挑战性的任务,就是“自动匹配”玩家进入一个“游戏房间”,这需要对所有在线玩家做搜索和过滤。
玩家先登录“大厅服务器”,然后选择组队游戏的功能,服务器会通知参与的所有游戏客户端,新开一条连接到房间服务器上,这样所有参与的用户就能在房间服务器里进行游戏交互了。
最后
游戏行业相对于互联网应用来说,其开放性和标准化并不完善,这就导致了很其他行业看游戏有一种神秘面纱,隐秘而封闭。
造成这个原因有很多,游戏业务的复杂性以及受众群体小是主要原因,它不像web应用天生有开源组织和社区基因的支持,也没有互联网行业的如此大的受众面和影响力,除了一些比较出名的游戏引擎以外其他的功能组建都是有各个游戏公司基于自己业务逻辑自己搭建,每个公司业务方向不同又加大了知识的流通以及标准的建立,这对整个生态的发展已经产生了制约,特别是那些想加入游戏行业的新人来说,准入门槛较高,网上可找到的学习资料也很少。
这种现象目前正在发生改变,除了受众群体越来越大和丰富以外,还有一些技术组织正在推进整个社区的进步。
比如每年一度的unity技术大会,以及其他优秀的开源引擎都在积极推进整个游戏社区的创建,除了吸引更多优秀的技术人才和团队加入,这一切都让游戏行业变得越来越开放和规范,让行业内的知识也得以流通和继承。当然了,也期望每个游戏人能够加入进来,分享自己的知识,让自由开放的共享精神传承每个地方。
讲到这里,小编这一篇文章的内容也就结束了。
>>>>>>点击进入游戏开发专题