有价值文章收集(即时通信)

即时游戏通信

所有逻辑实际发生的时刻都在服务端,只有当数据发送到服务端时,事件才真正发生。
客户端的操作应该是立即响应的,必须先行动,才发送数据。
导致的结果是,客户端的事件发生时间和服务端是不同的。自己的行为会比服务端早,别人的行为会比服务端晚。由于具有时间差,客户端完成的行为可能会和服务端实际发生的行为不同。这时候就只能由服务端校正客户端,但只有在出现冲突时才需要校正,而不用校正所有的差异。
当客户端必须从服务端获得数据才能继续逻辑的时候,自然只能等待服务端返回才会出现事件,但是服务端的事件会先发生。
服务端发送的事件,客户端必须无条件接收,无论当时看起来是否合理。

行走,应该认为是客户端在实际远程操作服务端,将自己的操作发送给它。因此必然是具有延迟的操作。而客户端的显示则是自己处理的。不同步将会影响其他的判断,但这是无法避免的。双方差异过大则校正。
普通的攻击。只要客户端显示在范围内,CD时间已经到了,攻击动画就可以正常播放。但是由于具体的伤害值必须由服务端计算(随机),因此伤害数据和实际减血必须等服务端返回后才会发生。如果由于坐标问题服务端判断这个攻击不成立,将返回MISS。
某些顺发技能可能无法做MISS处理,则需要先由服务器判断是否可行后再释放。可以先做动作,但是效果发生在判断完成前必须等待。
打开宝箱是立即的操作,但是显示获得物体必须服务端判断。如果认为无法获得宝箱,显示空或者错误信息。
触发陷阱,完全服务端判断,客户端只作显示。

原文地址:https://www.cnblogs.com/axyz/p/2059598.html