服务器和客户端计时不同

时间:2018-12-19 00:22:22

标签: time timer server xna client

我在客户端服务器上遇到的情况是双方都在测量时间,似乎只有一个问题,就是测量的时间不匹配。 简而言之,想法是程序需要倒数计时。我在服务器端进行测量。但是,需要显示倒计时,所以我要做的是我在客户端分别运行它。最终结果是,当服务器发送表示倒计时10分钟的时间的消息时,客户端显示的时间增加了23秒。

客户端是XNA,代码:

MillisecCount += gameTime.ElapsedGameTime.Milliseconds;
if (MillisecCount >= 1000)
    {
    MillisecCount -= 1000;
    Timer++;
    }

然后从可用时间中减去计时器,并显示出来。 在服务器端,这正在发生:

async Task timeOut(int delay, CancellationToken ct)
    {
    await Task.Delay(1000 * delay);

    ct.ThrowIfCancellationRequested();
    }

void sendTimeOutMessage(Task t)
    {
    //Send timeout message on network.
    }

void reTime()
    {
    CancellationTokenSource cts = new CancellationTokenSource();
    CancelStack.Push(cts);
    Task t = timeOut(maxTime - Timer, cts.Token);
    t.ContinueWith(sendTimeOutMessage, TaskContinuationOptions.OnlyOnRanToCompletion);
    }

在具有23秒差异的测试场景中,reTime()在倒数开始时仅被调用一次。

1 个答案:

答案 0 :(得分:1)

好吧,事实证明XNA有时没有计算时间,这使得客户端有些慢。而是在客户端使用秒表来同步这两个方面。