Как я получаю задержку между сервером и клиентом в C#?

Попробуйте этот код.

таблица {поле: авто; border: solid // вы забыли эту строку в своем коде, поместите эту строку для отображения границы. }

7
задан Stephen Kennedy 12 March 2018 в 15:58
поделиться

4 ответа

Извините, что это не дает прямого ответа на ваш вопрос, но, вообще говоря, вы не должны слишком сильно полагаться на измерение задержки, потому что она может быть довольно переменной. Мало того, вы не знаете, является ли измеренное вами время пинга симметричным, что важно. Нет смысла применять 10 мс коррекции задержки, если выясняется, что время пинга 20 мс фактически составляет 19 мс от сервера к клиенту и 1 мс от клиента к серверу. И задержка в терминах приложения не такая, как в терминах сети - вы можете пропинговать определенную машину и получить ответ через 20 мс, но если вы обращаетесь к серверу на этой машине, который обрабатывает сетевой ввод только 50 раз в секунду, то Ваши ответы будут задержаны на дополнительные 0–20 мс, и это будет довольно непредсказуемо.

Нельзя сказать, что измерение задержки не имеет смысла в сглаживании предсказаний, но не решит вашу проблему, просто немного ее очистит.

На первый взгляд проблема здесь заключается в том, что что вы отправили информацию в первом сообщении, которое вы используете для экстраполяции данных до получения последнего сообщения. Если все остальное остается постоянным, то вектор движения, указанный в первом сообщении, умноженный на время между сообщениями, даст серверу правильную конечную позицию, в которой клиент находился примерно сейчас - (latency / 2). Но если задержка изменится вообще, время между сообщениями будет увеличиваться или уменьшаться. Клиент может знать, что он переместился на 10 единиц, но сервер имитировал его перемещение на 9 или 11 единиц, прежде чем ему было приказано привязать его к 10 единицам.

Общее решение этого состоит в том, чтобы не предполагать, что задержка будет оставаться постоянной, а посылать периодические обновления позиции, которые позволяют серверу проверять и исправлять позицию клиента. Всего 2 сообщения, как у вас сейчас, все ошибки найдены и исправлены после 2-го сообщения. При большем количестве сообщений ошибка распределяется по большему количеству точек выборки, обеспечивая более плавную и менее видимую коррекцию.

Тем не менее, она не может быть идеальной: все, что требуется, - это скачок задержки в течение последней миллисекунды движения, и представление сервера будет превышать , Вы не сможете обойти это, если прогнозируете будущее движение на основе прошлых событий, так как нет реальной альтернативы выбору правильного, но позднего или неправильного, но своевременного, поскольку для перемещения информации требуется время. (Виноват Эйнштейн.)

Всего 2 сообщения, как у вас сейчас, все ошибки найдены и исправлены после 2-го сообщения. При большем количестве сообщений ошибка распределяется по большему количеству точек выборки, обеспечивая более плавную и менее видимую коррекцию.

Тем не менее, она не может быть идеальной: все, что требуется, - это скачок задержки в течение последней миллисекунды движения, и представление сервера будет превышать , Вы не сможете обойти это, если прогнозируете будущее движение на основе прошлых событий, так как нет реальной альтернативы выбору правильного, но позднего или неправильного, но своевременного, поскольку для перемещения информации требуется время. (Виноват Эйнштейн.)

Всего 2 сообщения, как у вас сейчас, все ошибки найдены и исправлены после 2-го сообщения. При большем количестве сообщений ошибка распределяется по большему количеству точек выборки, обеспечивая более плавную и менее видимую коррекцию.

Тем не менее, она не может быть идеальной: все, что требуется, - это скачок задержки в течение последней миллисекунды движения, и представление сервера будет превышать , Вы не сможете обойти это, если прогнозируете будущее движение на основе прошлых событий, так как нет реальной альтернативы выбору правильного, но позднего или неправильного, но своевременного, поскольку для перемещения информации требуется время. (Виноват Эйнштейн.)

Это никогда не может быть совершенным, хотя: все, что требуется, - это скачок задержки в последнюю миллисекунду движения, и представление сервера будет превышено. Вы не сможете обойти это, если прогнозируете будущее движение на основе прошлых событий, так как нет реальной альтернативы выбору правильного, но позднего или неправильного, но своевременного, поскольку для перемещения информации требуется время. (Виноват Эйнштейн.)

Это никогда не может быть совершенным, хотя: все, что требуется, - это скачок задержки в последнюю миллисекунду движения, и представление сервера будет превышено. Вы не сможете обойти это, если прогнозируете будущее движение на основе прошлых событий, так как нет реальной альтернативы выбору правильного, но позднего или неправильного, но своевременного, поскольку для перемещения информации требуется время. (Виноват Эйнштейн.)

11
ответ дан 6 December 2019 в 08:17
поделиться

Вы можете использовать уже доступный класс Ping . Должно быть предпочтительнее написания собственного ИМХО.

4
ответ дан 6 December 2019 в 08:17
поделиться

Имеется команда «ping», в которой вы отправляете сообщение с сервера клиенту, а затем время, необходимое для получения ответа. За исключением сценариев перегрузки процессора, он должен быть довольно надежным. Чтобы получить время поездки в один конец, просто разделите время на 2.

2
ответ дан 6 December 2019 в 08:17
поделиться

One thing to keep in mind when using ICMP based pings is that networking equipment will often give ICMP traffic lower priority than normal packets, especially when the packets cross network boundaries such as WAN links. This can lead to pings being dropped or showing higher latency than traffic is actually experiencing and lends itself to being an indicator of problems rather than a measurement tool.

The increasing use of Quality of Service (QoS) in networks only exacerbates this and as a consequence though ping still remains a useful tool, it needs to be understood that it may not be a true reflection of the network latency for non-ICMP based real traffic.

There is a good post at the Itrinegy blog How do you measure Latency (RTT) in a network these days? about this.

4
ответ дан 6 December 2019 в 08:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: