服务器和客户端时间不同
server and client timing different
我有一个客户端服务器的情况,每一方都在测量时间,唯一的问题似乎是测量的时间不匹配。
长话短说,这个想法是有一个倒计时,之后程序需要做一些事情。我在服务器端测量这个。但是,需要显示倒计时,所以我做的是在客户端单独 运行 它。最终结果是,当服务器发送 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() 仅在倒计时开始时被调用一次。
好吧,事实证明 XNA 有时不计算时间,这使得客户端变慢了一些。在客户端使用秒表而不是同步两侧。
我有一个客户端服务器的情况,每一方都在测量时间,唯一的问题似乎是测量的时间不匹配。 长话短说,这个想法是有一个倒计时,之后程序需要做一些事情。我在服务器端测量这个。但是,需要显示倒计时,所以我做的是在客户端单独 运行 它。最终结果是,当服务器发送 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() 仅在倒计时开始时被调用一次。
好吧,事实证明 XNA 有时不计算时间,这使得客户端变慢了一些。在客户端使用秒表而不是同步两侧。