游戏服务器是啥样的


游戏服务器是啥样的

大家好,今天来为大家分享游戏服务器的一些知识点,和游戏服务器长什么样子的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!

在线游戏当中,如果有‘在线’则一定会跟随‘游戏服务器’。通俗的讲:你去参加婚宴,以圆桌为例,人围着桌子坐,如果100人都做一个桌子上,那么你想吃一个菜的时候,需要转很久才能吃到这个菜;如果分开10个桌子,一个桌子上10个人,那么你很快就能吃到想吃的那个菜。这里的桌子,就是所谓的服务器,它是承载你吃的菜的一个载体;多个服务器的作用就是把这个吃饭的人分开,让他们都能快速的吃菜。可以大致将服务器分类为‘主机(Host)游戏服务器’和‘专用(Dedicated)游戏服务器’。

主机游戏服务器是指,在购买一个游戏后直接运行游戏中的游戏服务器并与他人一起进行游戏的程序。而在专用服务器,游戏玩家无法直接在自己的电脑上运行服务器,而是由游戏制作商运行游戏服务器。专用服务器可以承载比主机服务器更多的同时在线人数,少至数十名多至数百万名可以同时进行游戏。游戏制作商保留专用服务器,因此无论是在技术上还是在法律上,游戏玩家直接运行游戏服务器是不可能的。

游戏公司往往在运行初期要投入大批资金,购买高性能服务器。可是,一旦进入赢利期,后续的投入几乎可以不计,所以,行业内的投入主要在于游戏规则的创设,代码的编写,以及带宽的租用,服务器的购买或者租用。

在很多MMORPG中,聊天都占据了大部分的网络流量,所以将聊天业务分离,建立单独的聊天服务器成为了很多开发者首先想到的事情。

其次是回合制战斗MMORPG中的战斗模块,由于玩家在进行战斗时,几乎和主服务器完全没有关联,所以将战斗业务分离到单独服务器也是理所当然、顺理成章的事情。

首先要知道游戏类型是什么,然后知道承载人数是多少,以及开发周期多少。需要根据这些来决定游戏架构和技术选型。

对于gameplay来说,本身就是个大循环,一定频率进行tick,接收来客户端或者其他服务器的rpc,处理逻辑,然后数据落地以及发送数据给客户端或者其他服务器,一般gameplay来说在同一个进程里都是同步的方式去编写,同步的实现大多数是单线程的,或者使用coroutine来实现actor这种模式。大部分游戏交互都是比较多,所以不论service和service之间的交互还是玩家和玩家之间的交互,如果考虑多线程的同步的问题,会非常复杂以及很容易做错,所以一个service内同一个时刻都是在一个线程中执行的。

针对mmo或者一些竞技类游戏往往有场景管理的概念,就是游戏AOI,比如一个玩家移动,需要告诉周围所有的玩家,复杂度在n*n,如果减少这个n,就有了AOI算法,比如九宫格,十字链表等,如果刚开服的时候很多人挤到一个主城中,就算采用九宫格和十字链表等AOI等算法,往往同屏内玩家数量还是很大,客户端渲染的单位数量比服务器少一个数量级的,所以场景管理这里还可以有个分线的做法,玩家多的时候,不同线不可见,玩家少的时候进行合并。

如果做帧同步一些关键点为表现要和逻辑分离,随机算法和随机种子的一致性,数学库浮点换定点,三角函数采用泰勒展开或者查表法,需要保序的容器,timer不能基于钟表时间而需要帧timer,以及防作弊(一般都是投票法,或者服务器跑个验证端)

现在很多游戏在线更新bug甚至不停服更新慢慢变成一种强需求了,实现这种方式主要使用脚本热更新,热重启 逻辑内存以及ab服切换来实现。