当服务器对职位有最终决定权时,它应该通过验证和合理检查客户端作为输入和职位发送的内容来做到这一点。我之所以这样说,是因为您正在做的事情是立即移动播放器,并且在您的代码中创建的期望是客户才是真正的位置。
您认为它通常运行良好,但事实并非如此。旁注:您说您的客户端不过是一个渲染器,然后立即为其提供本地控制以在没有服务器消息的情况下四处移动。不能同时使用两种方法,要么等待服务器告诉您移动,要么对位置进行一些控制,然后使用服务器来验证作弊行为。
我注意到您的回复达到一秒钟吗?这是500毫秒的延迟,对于任何类型的动作游戏而言,这都是可笑的。尝试找出这种转变为什么要花这么长时间的原因,可能是命令队列备份(从不及时处理到带宽泛滥,甚至是导致许多数据包丢失的恶魔)。
我认为应该发生的是
client sends a move + position update
server gets it t+latency time later
server verifies and sends out info to all clients
client receives this at (t+latency + latency)
这里最棘手的部分是,如果客户收到有关自身的消息,则它通常应该忽略它,除非该消息是诸如“无效的举动,改为转到XYZ”之类的消息。如果该消息是给其他客户的,您正在获取有关该消息的信息,那么您就必须及时推断出转发信息,这样看起来就可以了。