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

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

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

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

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

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

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

8358 次点击
所在节点    游戏开发
45 条回复
bbao
2021-03-22 13:18:36 +08:00
王者荣耀是 16ms 一次帧同步,服务器负责收集和推送客户端进行重放,卡顿时候,那种快进快打的效果,就是客户端播放过往同步的帧
fighte97
2021-03-22 13:47:02 +08:00
看你到底要做什么,除了 FPS 和 FTG 其他的根本不需要低延迟
xishijt
2021-03-22 14:01:07 +08:00
歪个楼,所以戴森球什么时候出联机?
dbpe
2021-03-22 16:32:54 +08:00
@gBurnX 所以这里我很好奇.WOW,战地这些有延时补偿的游戏是怎么做的呢..
wasd6267016
2021-03-22 16:53:09 +08:00
@gBurnX 哈?完全帧同步的游戏玩家数都上 3 亿了 …… 你了解下原理,1s 级别的状态同步完全没必要
wasd6267016
2021-03-22 17:00:31 +08:00
@gBurnX
“WOW 在这个问题上是花了大量心思的,当年网络延迟波动有可能高达一两秒,但游戏画面与操作却没有太大的卡顿。不像现在的 LOL 和王者荣耀,延迟大于 100ms 就会有明显感觉。这就是游戏体验在设计上的差距。”
lol 和 wow 完全是两种模式
当你延迟超过 1s 的时候 你玩什么游戏体验都不可能好,装作“体验好”只是安慰你罢了
这有什么吹的啊 多少人被低 ping 战士乱杀的时候也没少骂啊
高延迟情况下,状态同步的 wow 之所以你觉得“不卡” 是客户端在假装模拟罢了,但是真正战斗起来你就会发现看上去你打到了总是不扣血( FPS 也经常会这样),因为你客户端模拟的打到了,在服务器根本没大到,最终以服务器结果为准

帧同步的游戏这几年能火就是完全因为网络条件好了啊,你玩 lol 的时候能接受技能看着打到了结果不扣血?
这还能硬吹一波 wow……服了
wasd6267016
2021-03-22 17:04:52 +08:00
@gBurnX
错误太明显了吧
“简单来说,王者荣耀这类游戏不是 p2p 游戏,而是严格的 客户端 - 服务器 模式( C-S )。
简单说一下流程:

1.玩家的客户端, 负责把玩家的操控指令,发到服务端。

2.服务端负责接收所有玩家客户端的操控指令,并负责计算,最后把计算结果反馈给所有的玩家客户端。

3.玩家客户端负责接受服务端的运算结果,并显示出来。”

来来来 http://youxiputao.com/articles/12939?qqdrsign=06f3d
看看这篇文章
第二点就是完全错的 服务器只接受指令转发指令 所有的计算客户端来进行

你上面说的这种 算是一种状态
fenghengzhi
2021-03-22 17:09:40 +08:00
多人游戏同步无非就是帧同步和状态同步
但这和多人协作还是有一些不一样的,你 LOL 王者荣耀每个人都是控制各自的英雄,你控制不了别人的英雄,
而多人协作是可能会有多人同时控制相同内容的情况的
gBurnX
2021-03-22 20:24:43 +08:00
@wasd6267016

1. 括号里的 1s 只是给个例子,并不是说一定要 1s 啊。

2.并不是硬吹 wow,而是 WOW 在延迟高达 1s 甚至更高的情况下,人物行走控制与技能释放也是很流畅。而王者荣耀延迟只要超过 100ms 甚至 500ms 时,仅仅行走控制就会变得很艰难。

3.建议您留意一下,您发的那篇文章,时间是什么时候的。如果您近期还在玩王者荣耀高端局,您会发现最近锁血挂消失了,封神榜也很久没有锁血挂了。另外,你发的那篇文章,里面也存在常识性的错误。
secondwtq
2021-03-22 20:32:54 +08:00
看到提到帧同步,可以参考一下这个文章
https://zhuanlan.zhihu.com/p/165293116 关于 “帧同步”说法的历史由来

另外还有一些整活的: https://www.forrestthewoods.com/blog/tech_of_planetary_annihilation_chrono_cam The Tech of Planetary Annihilation: ChronoCam
secondwtq
2021-03-22 20:49:54 +08:00
@gBurnX
> 另外楼上有些小伙伴说了帧同步,实际上没有纯粹的帧同步游戏,不然只要有网络延迟,游戏的不同步率只会越来越大。
> 帧同步率的游戏,其实是帧同步 + 每隔一段时间( 1s )的全局状态同步。当年 war3 和 starcraft 的联机挂就是针对全局同步的漏洞来实现联机时资源修改的功能。

来源请求
cs8425
2021-03-23 10:55:42 +08:00
@gBurnX #29
2. "流畅"只是客户端设计成不等伺服回应 直接呈现画面造成的假象而已
3. @wasd6267016 是说实际上血量因為延遲 "还没有"扣到 以至于看起来像锁血 跟挂没有关系 不要瞎扯....
gBurnX
2021-03-23 11:22:39 +08:00
@cs8425

你说的第 2 点,我已经在最开始的 18 楼详细解释过了。建议您以后在回复前,先仔细看评论,别遗漏,以免造成没必要的误会。

至于你说的第三点,我觉得你对同步原理还欠缺深入,并且你对这款游戏也没怎么关注,同时你也没怎么用过外挂。

首先服务器只接受指令转发指令这种模式,就一定能做锁血挂这种东西。很多年前,QQ 游戏大厅里一些 P2P + 服务器中转混合模式的小游戏,都存在这个问题,甚至直接出现无敌挂。以前很多国服选手已经证实过了锁血挂,而且还上过封神榜。

你不关注这些事情,请不要随意说别人瞎扯,谢谢。多学习,多沟通。
cs8425
2021-03-23 13:06:56 +08:00
@gBurnX #33
行 你就当我漏看吧
#18 跟 #29 的回覆完全不像同一个人= =
如果可以的话
我想请教一下"SD 敢达 Online"这种同时有 P2P 又同时是 C-S 的游戏要怎看...?
wasd6267016
2021-03-23 13:59:32 +08:00
@gBurnX 大哥…… 王者荣耀开发者自己写的 到你这里就是常识性错误了
wasd6267016
2021-03-23 14:08:26 +08:00
@secondwtq 游戏的不同步率只会越来越大 这句话就已经表明他根本不懂 帧同步了
gBurnX
2021-03-23 17:21:32 +08:00
@wasd6267016

1.我的意思是,你发的资料,是很久以前的了。那种结构,出现锁血挂很正常。

2.常识性错误指的是星际。星际因为早期这种架构,出现了联机下的资源修改挂,后来的版本通过使用混合模式,修复了这个问题。截止到你发的文章的日期,星际已经不是一个纯粹的指令同步了。
gBurnX
2021-03-23 17:23:12 +08:00
@wasd6267016

纯粹的指令同步,延迟越高,随着时间增长,一定会出现不同步率越来越大。

年轻人,不要随意说别人不懂。你觉得别人不懂,那你直接上技术细节。
gBurnX
2021-03-23 17:35:54 +08:00
@cs8425
实在抱歉,你说的 [SD 敢达 Online] 这游戏,我没玩过,也没研究过...

游戏的同步模型,现在发展的比较成熟,很少有只使用单一同步模式的游戏了。

从大方向上来看两个极端:
1.延迟越要低,服务端就越不应该参与计算。但劣势是,同步率越容易出错,掉线重连成本越大,同时外挂越容易做。

2.与上面相反的另一个极端是,同步率要高,掉线重连成本要低,外挂要难做,服务端就应该参与数值计算,甚至要对各客户端的数据进行验证。比如吃鸡的 1km 透视外挂,从技术层面来说,一种很简单的解决方法,就是服务端对玩家数值做验证。我不是吹 WOW,WOW 在玩家可行进的范围,是服务端做了验证的,不然 WOW 还会有穿墙挂。回到吃鸡,如果加入验证,玩家是没办法做到简单的透视的。但问题是,如果加入验证,蓝洞的服务器成本会成倍提高,他们从财务上并不愿意去做这事。

如果开发一款新游戏,应该针对玩家的用户体验、游戏逻辑,在不同场景、不同游戏模式中,混合使用这两种不同的同步策略。比如现在王者荣耀的掉线恢复功能,客户端代价很大且恢复速度慢。如果要提高用户体验,该功能其实应该改用混合两种同步策略,主第二种同步方式,同时用数据库联机同步技术来用第一种,但王者没做,主要是这种混合策略会很复杂,他们目前没能力做好,其次服务器与带宽资源的投入会加大,财务上也不一定顶得住。
wasd6267016
2021-03-23 19:11:36 +08:00
@gBurnX 谁主张谁说明 你不说技术细节反而让别人来证明
纯粹的技术问题争论都要用“年轻人”这种称呼来摆架子了么……
那你赢了

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

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

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

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

© 2021 V2EX