快节奏多人游戏同步(1)-ClientServer架构

Author Avatar
sNatic 5月 07, 2018
  • 在其它设备中阅读本文章

嗯。。。所以就翻译一下「快节奏多人游戏同步」这个系列吧~自从来柏林似乎就一直没有写文章的样子,不知道整天在忙什么。。。最近突然被问起帧同步相关的东西,感觉自己写了不少帧同步的逻辑但是又没什么好分享的就很伤感~想到前几天看到蛮有趣的文章,虽然不完全是帧同步相关的但是却很有参考价值,拿来随便翻译一下希望对大家稍微有帮助。。水平有限大家看看差不多就好了,贴出「原文地址」希望英语好的同学直接去看原文不要被我误导就好~

PART 1 概述

本文是关于探索快节奏多人游戏的技术和算法系列的第一篇,因此对多人游戏概念非常熟悉的同学可以随意的跳过这一篇就好啦~因为接下来只是一些介绍性质的讨论。。。

任何类型的游戏开发都是某种挑战,然而在多人游戏中我们还有更多全新的问题函待解决~最最 Interesting 的地方在于其核心问题其实是人类和物理!- - 好吧其实是作弊和地理限制造成的网络延时。。

PART 2 反作弊

『一切罪恶来源于作弊』

作为一名游戏开发者,你一般情况下都不怎么在意玩家在单机游戏中作弊,毕竟作弊者只能影响到自己,虽然他可能无法获得你设计的游戏体验,但毕竟买了游戏就有权利随便按照他们自己的想法玩。

在多人游戏中就完全不一样了。。在任何竞技性游戏中,作弊的玩家提升了他们自己的游戏体验不说,最万恶的是他还破坏了其他玩家的体验。作为一名开发者对此必然深恶痛绝,因为这极有可能导致玩家流失。

当然有很多方法可以反作弊,但是最重要的(也可能是唯一真正有效的)只有一条:不要信任任何玩家。永远从最坏的角度去考虑 - 即所有玩家都会试图作弊。

PART 3 权威服务器和傀儡客户端

这会导致一个看起来简单的解决方案 - 让游戏在服务器上运行从而始终在你的掌控之中,客户端只是一个功能有限的“播放器”。换句话说,客户端只发送输入(按键和命令等)到服务器,服务器运行游戏逻辑后将结果发回客户端。该方案通常被称为权威服务器,因为游戏世界中的一切都受到服务器的控制。

虽然你的服务器也有可能遭受攻击,但那种情况不在本文讨论范围之内。使用权威服务器可以很大程度上减少被破解的风险,比如说在你不信任客户端的角色血量的情况下,一个被破解的客户端可能显示有1W血,但事实上服务器知道该玩家只剩最后10点血了~所以无论客户端怎么破解当他被其他玩家攻击时就会瞬间爆炸并死亡。

同样地,如果你信任玩家的坐标的话,被破解的客户端会告诉服务器“我在 (10,10) ”然后一秒钟后又说“我在 (20,10) ”,这或许会导致该玩家穿墙或者比其他玩家速度更快之类的问题。相反,如果服务器知道玩家当前位置在 (10,10) 并且客户端告诉服务器“我想要向右移动一格”,此时服务器更新其内部状态使玩家到达新位置 (11,10),然后将结果回复给该玩家。

A simple client-server interaction.

总的来说,服务器独立管理游戏状态,客户端发送其操作至服务器,服务器周期性的更新游戏状态,并将结果发回客户端,最终呈现在玩家的屏幕上。

PART 4 考虑网络问题

傀儡客户端在慢速回合制游戏中表现良好,例如策略游戏或卡牌游戏。在局域网中也不错,因为所有通信几乎是零延迟响应。但在非局域网条件下的快节奏多人游戏中完全行不通。

我们来讨论一下物理世界的状况,假设你在旧金山,连接到纽约的服务器,大概有 4000 km 的距离,考虑到即使是网络上的字节流也无法超光速传输,光速大约是 300,000 km/s 因此通讯耗时约 13 ms。

听起来感觉好像很快的样子,然而这只是假设数据沿直线以光速传输的理论最优解,现实生活中不太可能出现,数据在路由器中需要经过一系列跳跃,大多数情况都无法达到光速,路由器本身也会由于包的复制,检查和转发等行为而造成一定的延迟。

为了方便讨论,我们假设数据从客户端到服务器需要 50ms 的时间,这已经是很好的情况,那么如果要从纽约连接到东京的服务器呢?如果遭遇网络拥堵等状况呢?延迟 100ms 、200ms 甚至 500ms 都是有可能的。

再回到我们的例子,你的客户端发送了“我按下了向右按钮”到服务器,50ms 后服务器收到了该消息。我们假设服务器立即更新了游戏状态并回复结果。客户端仍然需要再过 50ms 才能收到“你现在在(1,0)点”的消息。

在你看来,你只是按下按钮后 1/10 秒的时间内没有响应,然后你的角色向右移动了1格。这种程度的「延迟」听起来或许不算什么,但感觉上却非常明显。而当延迟达到半秒钟的时候,这游戏就没法玩了。。。

PART 5 总结

多人网络游戏非常有趣,但也带来了全新的挑战。权威服务器架构虽然对于解决作弊问题非常有效,但是若不加以修饰的直接使用会导致游戏反应非常迟钝。

在接下来的文章中,我们将探索如何在权威服务器的基础上最小化玩家的延迟感,从而达到单机游戏的体验。


原文链接:https://snatix.com/2018/05/07/015-client-server-game-architecture/

本文由 sNatic 发布于『大喵的新窝』 转载请保留本申明