问题引入:这里主要讨论状态同步,client A发生状态变化(移动,换装,属性变化等),将变化的信息同步到client B,最简单做法就是直接通过服务器中转然后广播出去,但是由于存在网络延迟,所以client B收到的消息总是滞后的,这对于高精度高技巧性的游戏的无法容忍的。
解决方式:首先要实现网络对时操作,所谓对时,并不是要求客户端时间跟服务器保持一致,而是通过在数据包中加入时间戳,算出数据包的网络延迟时间。首先客户端向服务器发送一个消息包,里面带上客户端的本地时间t1,服务器收到数据包打上服务器本地时间t2,服务器在内部流转该数据包可能会有时间消耗(比如一些逻辑处理,校正等),在服务器广播该数据包的时候打上服务器本地时间t3,客户端收到服务器广播的数据包时打上客户端本地时间t4。这里我们假设数据上下行的网络延迟是一样的。那么通过计算((t4-t1)-(t3-t2))/2, 就可以计算出单程一个网络包的大概延迟。
 
                   
                   
                   
                   
                             本文探讨了高精度游戏中的网络同步问题,介绍了通过在网络数据包中加入时间戳来计算网络延迟的方法,实现客户端与服务器间精确的时间对准,以减少状态更新的滞后,提升玩家体验。
本文探讨了高精度游戏中的网络同步问题,介绍了通过在网络数据包中加入时间戳来计算网络延迟的方法,实现客户端与服务器间精确的时间对准,以减少状态更新的滞后,提升玩家体验。
           
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   1万+
					1万+
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            