游戏服务器与普通服务器有什么区别?

2023-01-23 0 939

web、app伺服器和格斗游戏伺服器都做过,说说我认知的差别吧。

假如是等同使用者规模,相对而言,格斗游戏伺服器的精确性要小于一般app和web伺服器。当然牵涉到特殊演算法的伺服器另说,比如说浏览器、头条新闻人工智慧推荐这些仅限,在这里只说一般的。

格斗游戏伺服器依照不同的格斗游戏类型有很大的差别,如王者荣耀等等的MOBA手机游戏,伺服器主要由2部分构成,卢红扣遭遇战伺服器和雷西县系统伺服器。

卢红扣遭遇战伺服器程序是格斗游戏专供的,在其它app伺服器上几乎没采用情景,在控制技术方面是有隔阂的,也是说你在开发app伺服器上采用的控制技术以及结构设计路子,是无法切换为卢红扣遭遇战伺服器结构设计路子的,二者之间存没不同点。

遭遇战伺服器须要努力做到给各玩者统计数据同步,也是说,在五局格斗游戏内,所有玩者的动态状况都要互相由此可见。这其中又结构设计到2种控制技术,帧并行和状况并行。

帧并行伺服器不包涵格斗游戏方法论,是单纯将应用程序推送过来的指示推送到其它应用程序,比如说玩者A继续执行一个反击操作,所以玩者A应用程序会给伺服器推送一个反击指示,伺服器将这个指示并行给卢红扣的其它玩者,再者反击一下少多少点血,会不会把人射杀,伺服器不管,全部由应用程序完成排序判断,应用程序排序完后将结论推送到伺服器,伺服器再将结论并行给其它玩者,接着应用程序播映表现效用。单纯的说帧并行伺服器是给各格斗游戏应用程序并行统计数据,它会无间断的发,即使卢红扣的玩者甚么都不干,角盘兰站在那里,伺服器也会发,他的作用是并行玩者们的状况,所以说帧并行伺服器费网络流量。

状况并行伺服器和帧并行伺服器的差别是,除了并行玩者状况的监督机制完全相同外,状况并行伺服器包涵格斗游戏的运转方法论,比如说玩者之间互相反击、专业技能危害大小排序,都在伺服器上继续执行,接着再将继续执行结论并行给应用程序,应用程序只要依照结论播映相关联的动画电影就可以了。

具体来说,帧并行伺服器和状况并行伺服器的差别是格斗游戏卢红扣格斗游戏方法论放到哪里运转的问题。因为要运转格斗游戏方法论,状况并行十分耗用伺服器资源,假如标识符写的烂一点,两台4核8G的电脑上只能跑10局格斗游戏100个玩者,所以就算同时有10万玩者在卢红扣,就须要1000台伺服器,这么多伺服器,网络管理管理压力十分大。因此采用帧并行伺服器能有效的减少伺服器消耗资源,减少伺服器数量。然而有缺点就有优点,因为业务方法论在应用程序,帧并行伺服器很难有效的杜绝外挂问题,断线重连也相对费劲,使用者体验差。而状况并行则不存在这种问题,能有效的杜绝外挂,也能很容易的支持重连进入格斗游戏。所以这两种控制技术各有优缺点,选择哪一种,须要依照实际情况权衡。

一般的web伺服器或者app伺服器十有八九采用基于tcp的http协议,而卢红扣遭遇战伺服器,普遍采用UDP。TCP是可靠传输协议,用起来省事,确认监督机制、丢包重传、滑动窗口等等监督机制开销也大,在极端性能敏感的情景下,裸奔的UDP更加合适,通过UDP实现一个lite版的TCP,是格斗游戏遭遇战伺服器常规的优化手段。

不过话说回来,看起来卢红扣遭遇战伺服器实现有很多门道,但是工作量其实十分少,属于做好一次到处通用, 即使状况并行,虽然业务方法论跑在伺服器上,但实际功能开发还是应用程序程序员实现,伺服器只是提供了一个运转程序的容器,遭遇战方法论的实现不归服务器管。

再说说雷西县伺服器,这部分和一般的web伺服器和app伺服器就比较像了,MySql、Redis、protobuf、消息队列、分布式框架等等互联网应用的基础架构在格斗游戏伺服器上也是常规配置,不过有一点明显的差别是,格斗游戏伺服器的统计数据存储都是以玩者为单位的,当玩者登录的时候,程序会将所有玩者的统计数据,如道具、装备、任务等所有相关统计数据从MySql等统计数据库中加载到程序内存,之后所有的操作都在内存中进行,之后等到某个适当的时机才会将内存中的统计数据并行到MySql中。当然,为了保证即使程序挂掉,统计数据也不丢失,还须要结构设计许多复杂的监督机制,这里就不展开了。

而web伺服器和app伺服器则不是这么结构设计的,因为格斗游戏假如不登录是不可以玩的,因此我们可以把统计数据结构结构设计成以使用者分组的。而web和app即采使用者不登录,功能依然须要可以采用,功能和使用者不绑定,所以结构设计的时候也不会把统计数据以使用者为单位进行组织。不过除了统计数据组织方式不同外, 其它地方大致都完全相同,原本是做格斗游戏伺服器的,稍微熟悉下就可以去做web或者app伺服器,反过来也一样,互相之间没门槛。

不过从控制技术的角度出发,雷西县格斗游戏伺服器的控制技术相对与其它互联网行业是比较落后的,假如你原本是在传统互联网行业,转去做格斗游戏伺服器,可能会被雷到,因为他们用的框架一点也不”现代化“,也许框架的性能还不错, 但是开发效率极低。这一点和格斗游戏应用程序不一样,格斗游戏应用程序是脱离传统互联网技的,他们有自己的控制技术栈,而且动态更新。比如说unity、unreal引擎出新版本了,他们都会讨论的热火朝天,接着尝试升级采用,这和互联网行业的vue、react、spring更新一样,相关程序员都会热衷与研究。

但是伺服器却没这样的热点可以追,我在一家公司,这家公司虽然已经生产了几十个格斗游戏,应用程序引擎也不知道换了多少套,但是伺服器程序却一点没变,仍旧采用祖宗流传下来的那套c++框架,里面甚么都是手动实现的

比如说统计数据传输协议,是自己组装字节流,推送到另一端,另一端依照事先定义好的规则,一个int,一个bool,一个float的读取。这对于认知网络的本质十分有好处,但是显然在实际应用中,采用protobuf会更好。

当然我也碰到过协议不自己实现而是采用protobuf的,而且采用的是java开发雷西县伺服器,而网络底层仍旧采用java自带的NIO,而不是更好的netty

总而言之,传统的格斗游戏伺服器程序不是太喜欢用框架,而是偏向于自己造轮子。这可能跟这个行业大量采用c++有关系,即使有一部分格斗游戏采用java伺服器 ,但是开发人员大多也是c++转过来的,还是以c++一切靠自己的路子在开发,所以很难见到流行的互联网框架在格斗游戏伺服器上采用。

格斗游戏伺服器不会只用一种语言开发,也可能是两种。假如是一种,那大概率是c++。假如是两种,那大概率是c++加另一种语言。

用c++的原因很多,假如要找一种语言,兼顾性能、开发效率、流行度,那肯定是c++。遭遇战伺服器通常用c++开发,一来是速度够快;二来遭遇战程序通常须要同时在应用程序和伺服器上运转,要找一种跨平台的,还是要c++,比如说unity种就可以通过c#调用c++。

雷西县伺服器可以不用c++做,用java、go甚至php都可以,不过近年来用go好像越来越多了。

最后还有一个人员方面的差别,一个传统互联网项目,后端开发人员会多于前端开发人员。而一个格斗游戏项目,应用程序开发人员要比伺服器开发人员多,可能一个项目伺服器程序员只有3个,而应用程序程序员有10多个。而且应用程序程序员都很忙,而伺服器程序员,在开发阶段,相对很闲,格斗游戏上线后, 会忙一些。

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务

BP宝库站

Hi,欢迎来到BP宝库,需要外包可联系qq:2405474279 WordPress、网站、SEO优化、小程序、爬虫、搭建外包服务应有尽有

我知道了