время сервера и клиента разное - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть ситуация клиент-сервер, когда каждая сторона измеряет время, только кажется, что проблема в том, что измеренное время не совпадает.Короче говоря, идея состоит в том, что существует обратный отсчет, после которого программа должна что-то делать.Я измеряю это на стороне сервера.Но необходимо отобразить обратный отсчет, поэтому я запускаю его отдельно на стороне клиента.Конечным результатом является то, что клиентская сторона показывает 23 секунды, когда сервер отправляет сообщение, сигнализирующее о том, что время истекло, с обратным отсчетом 10 минут.

На стороне клиента - 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 голосов
/ 01 января 2019

Хорошо, получается, что времена XNA не считает время, что делало клиентскую сторону несколько медленнее.Использование секундомера на стороне клиента синхронизирует обе стороны.

...