请教一下,类似 LOL,王者荣耀, Diablo3 这样的网络游戏,如何同步多机实时的数据?

2021-03-22 09:44:16 +08:00
 yazoox

比如:
一局游戏,
LOL 10 人
王者荣耀 10 人
暗黑 8 人 \

几个人的操作,显示,这些数据,都是要在 10 台机器 /客户端“同步“ 更新的!

类似这样的服务器&客户端架构,数据结构,数据同步,是如何设计实现的?有没有相关的文章详细讲解这个的?

p.s. 因为最近在看 Microsoft 的 Fluid 技术,用于多人协作的。但微软的这个,我个人理解,对于“实时”性要求不高,有点延时关系不大。只要数据准确,正确,不出错。

但是网络游戏不一样,对于实时性应该要求挺高的。好奇是如何设计和实现的。

8359 次点击
所在节点    游戏开发
45 条回复
wasd6267016
2021-03-23 19:12:56 +08:00
@gBurnX
也是 当你说王者荣耀这种游戏“服务端负责接收所有玩家客户端的操控指令,并负责计算”这句话时候 已经没和你讨论的必要了
wasd6267016
2021-03-23 19:17:29 +08:00
@gBurnX
“请问 Java 方向的软工大一的学生”
…… 哦 小屁孩啊 我笑了
secondwtq
2021-03-23 19:17:40 +08:00
@gBurnX
> 星际因为早期这种架构,出现了联机下的资源修改挂,后来的版本通过使用混合模式,修复了这个问题。

来源请求
gBurnX
2021-03-23 19:30:48 +08:00
@wasd6267016

1.从 [谁主张谁说明] 这个角度来看,你第一次质疑我,用的那篇文章,根本就没成功质疑到位,原因是那篇文章,无论时间、内容都有问题。你至少得去找一篇接近最近的,以及内容靠谱的文章,来作为你的佐证。然后如果我有空,可以给你讲讲到底是怎么回事。


2.你说,从我说的 xxx,就觉得没必要和我讨论。这个情况中,你既没说我说过的那句话,到底哪里有问题,你也没给出你认为的正确的方案。从我的角度来看,我觉得这种情况,你是为了杠而杠。

如果你不是为了杠而杠,你可以明确地讨论一下,我说的那句话,到底哪里有问题,或者你认为的正确的算法流程是什么。


3.软工大一学生那个帖子,是我帮别人发的。我在之前的回复里提到过好几次。作为你的讨论对象,你只看了我的提问,却没有耐心去翻翻我的回复,就急着来杠,说明你不仅不够细心,也没讨论问题的经验,心态还很急躁。所以,你会犯上面第 2 点这种基础错误,也就不奇怪了。同时,对于一个做技术的人来说,这些缺点都是大忌,很容易压低你的技术上限。就同步这简单的小问题,你会在这里翻船,也就不奇怪了。
timethinker
2021-03-24 12:32:00 +08:00
使用帧同步的这种游戏一般来讲实时性和运算复杂性要求都比较高,服务端不大可能参与运算。对于外挂,每一家公司都有不同的策略,有的是通过举报,即不公平性导致其他玩家察觉出外挂的存在,作弊玩家顾忌账号的注册成本,或者通过技术性的检测(即在服务端模拟一个轻量级的客户端接收事件序列,模拟当前的状态是否有异常,不过开发成本也会比较高)。

假设当状态都由服务端来进行计算,客户端的每一个细节都需要考虑到,计算量就会特别大,而且将这些计算完毕的状态再同步下发给客户端的网络带宽也很高(例如某一个物品的位置、状态),而且对于物理引擎也要跟客户端同步,比如计算碰撞、物理惯性各种细节,因为逻辑帧相对来说都比渲染帧要低,客户端也不能够完全按照服务端下发的状态进行立即同步,不然画面显示就会有卡顿,客户端必然要在本地进行平滑过渡处理,处理不好可能会导致画面漂移等一系列问题,就需要一个取舍。

所以在服务器进行状态运算产生的问题就是网络带宽和运算性能。

现在有一种叫做云游戏的东西,客户端只是当做一个“视频播放器”,把触摸或按下键盘的操作发给服务器,服务器完成操作渲染后传输流数据给客户端,客户端安装包可以做到很小,只有几 MB 。对于高实时的游戏来说明显会感觉到延迟,就像手机通过 2.4G 无线 WIFI 投屏到电视一样,手机画面同步到电视上总会慢一拍。

也有说网络延迟会越来越高,这个问题其实有时候我们玩游戏也能够感觉出来,一种做法是快进播放,网络的延迟只是暂时的,当它跟上来了,就需要把之前的逻辑帧补上去,所有有时候会觉得画面突然的快进,其他的玩家不会等你,在其他玩家看来你只是停留在那里,谁叫你网络不好呢对吧?

假设服务端只负责事件转发,就需要确保客户端的运算结果是一致的,包括不同设备 CPU 的浮点计算结果一致(有自己的底层计算库),游戏引擎也要做适配,不然就会产生不同步的现象,要保证这一点就需要大量的测试,尽可能覆盖多一点的设备。但是开发成本显然更低,只需要侧重于客户端,并且减少了与服务端的联调,开发效率就会提高。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/763822

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX