手机游戏延迟显示都是通过什么方式实现

3回答

手机游戏延迟显示都是通过什么方式实现

提问者 iCoder 2017-09-05 1.1k浏览
我能想到的就两种,但都觉得不大靠谱,希望有相关经验的大神给解答下
1. 每次接收服务器消息包时计算发送跟接收的差时(如果消息不是很频繁的话,延时就不是很准确了)
2. 单独一个消息包,每固定时间发送给服务器,然后计算延迟(成本是不是太高)
可能想的不够全面,当然希望大神们有更好的解决方案,谢谢。。。

快来消灭0回答吧

{{ dataList.answer_count | view-format }}回答
  • leofang 2017-09-05 14:49
    专家回答
    1.客户端发包给服务器,服务器收到包后立刻回包,这个时间差叫RTT。这个时间是准确的。
    2.固定时间给服务器发包,这个是手机比较通用的方法,一般用来检查手游弱网络的情况,弱网络并不一定断线,但是弱网络可能没法收发包,所以会定时给服务器发包来检测,这个包叫心跳包。
    3.比较不好确定的是服务器发一个包到客户端,单程花了多少时间,如何比较准一些的算出这个值,是要花点工夫去算的。一般如果是简单用RTT除2,即:RTT/2是不行的。这样很受网络波动影响。之前项目有过主方面的经历。多次求平均值,效果好一些,但是也出现网络波动比较大的情况下,比较不准的情况。后来采用了线性回归,即使用服务器时间和本地时间做线性回归。这个方案经过检验效果还是比较不错的。
    5评论
  • 我叫曾哥 2017-09-05 15:34
    我这边是一定时间做一次时间校对,以最短的消息来回耗时作为客户端相对服务端的延迟。以来回总时间为延迟好处是,比如某个商品的购买冷却时间,客户端算出的冷却时间一定是比服务端要晚一些(因为延迟算大了),客户端根据本地的冷却时间进行购买,基本不会出现服务端购买冷却还存在的问题。
    0评论
  • 刘宇 2017-09-06 20:13
    之前我做过一次是这样的:
    1. 开始客户端和服务器对时间戳
    2. 客户端发起定时的心跳包,代价并不高,每个包都带上自己的时间,平均计算延迟时间。
    3. 根据上面的各自本地时间,可以处理很多情况。
    0评论
  • {{ answer.user.NickName }} {{ answer.profession }} {{ answer.created_at | time-format }}
    专家回答
    {{{ answer.answer }}}
    {{ answer.answer_count | view-format }}评论
加载中... 查看更多回答