networking - 什么是点对点游戏中的同步?

标签 networking game-engine p2p peer

我正在研究游戏的点对点网络架构。 我从多个来源了解到,点对点模型使人们很容易被黑客攻击。发送有关您的游戏角色的错误数据,无论是您的错误位置还是您拥有的生命值。

现在我读到,让点对点更安全的方法之一就是在游戏中加入反作弊系统,该系统控制一些事情,例如:某人从地点 A 移动到地点 B 的速度有多快,或控制某人的健康点是否没有无故剧烈变化。

我还读过有关Lockstep的内容,它被描述为点对点网络中所有客户端之间的“握手”,其中客户端 promise 不做某些事情,例如“移动速度比X快或不超过X”。能够跳得比Y更高”,然后将他们的 Action 与“握手”中设定的规则进行比较。 对我来说,这似乎是一个反作弊系统。

我最后想问的是:Peer-To-Peer模型中的Lockstep是什么,它是反作弊系统还是其他什么,以及这个系统应该放在Peer-To-Peer中的什么位置。在每个玩家的计算机中,或者如果它不在所有玩家的计算机中,它是否可以工作,该系统应该控制整个游戏,还是仅控制一个子集?

最佳答案

Lockstep 的设计主要是为了节省带宽(在宽带出现之前)。

问题:当您只有极少量的带宽(14400-28800 波特)时,如何模拟分布在多个系统中的(数万)万个单元?

你不能做什么:通过网络发送数以万计的头寸或增量,每个价格变动。

您可以做什么:仅发送每个玩家所做的输入,例如,“玩家 A 命令这个(有限大小)组 ID=3 的选定单位前往 x=12, y=207”。

但是,现在每个客户端应用程序(或者更确切地说,P2P 客户端代码的开发人员)都有责任将这些输入转换为每个逻辑周期完全相同相同的游戏状态。否则,您会遇到同步错误和模拟失败,因为没有对等方具有权威性。这些同步错误可能不仅仅由作弊者造成,也就是说,它们可能在许多合法的、非作弊的场景中出现(事实上,当我还是个 90 年代的年轻人,玩锁步游戏时,这甚至是一种常见的挫败感)通过 LAN,这应该是可靠的)。

所以现在您只使用了一小部分带宽。但是,确保客户端不会产生不同步条件所需的细致编码使得这比权威服务器更难编码,在权威服务器中,服务器可能会丢弃不理智的输入或游戏状态。

作弊:很容易看到您不应该看到的东西:每个客户都拥有所有可用的模拟数据。修改游戏状态而不立即导致游戏崩溃是非常困难的。

关于networking - 什么是点对点游戏中的同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52318726/

相关文章:

sockets - 接收缓冲区的限制

c++ - 使用 asio::async_read 时接收之间的延迟

android - 如何在 libgdx 的舞台上绘制位图字体?

silverlight - 在线语音聊天 : Why client-server model vs. 点对点模式?

iphone - iPhone 点对点使用 Bonjour 协议(protocol)的替代方案

c - 了解 GNU/Linux 中接受挂起连接队列的大小

iphone - 强制 iPhone 模拟执行 CPU 密集型任务?

.net - MonoGame 游戏是否能够在未安装的情况下运行?

javascript - 移相器、圆形按钮

java - 用 Java 创建一个 Torrent 客户端?