Синхронизация времени между простым сервером на основе сокетов python и клиентами

У меня есть начало небольшой многопользовательской игры, которую я пишу на питоне в качестве учебного упражнения. В настоящее время сервер работает со скоростью 10 кадров в секунду, а клиенты работают с любой скоростью, которая им нравится. Это хорошо работает для экономии полосы пропускания, но если клиент не сообщает серверу, когда произошел его ввод, весь ввод квантуется до интервалов в 100 мс. Как я могу синхронизировать время между клиентом и сервером, чтобы я мог внести эти исправления? Основным препятствием здесь является то, что мне нужно определить время пинга и компенсировать его.


person Alex    schedule 12.12.2009    source источник
comment
Ответ, который придумали большинство других геймдизайнеров, состоит в том, что (по сути) вы никогда не получите хорошей синхронизации. Большие игры, такие как wow и kin, имитируют большинство действий на стороне клиента и отправляют обновления в любом направлении, как это удобно.   -  person Paul McMillan    schedule 12.12.2009


Ответы (2)


Я случайно наткнулся на мучительно прекрасную запись в блоге о том, как реализовать физику распределенной сети в общий (без традиционного клиентского предсказания). Я настоятельно рекомендую его вместе со слайдами GDC, представленными Фидлером пару лет назад. Удачи!

person Jonas Byström    schedule 15.12.2009
comment
Спасибо, я помню те посты в блоге давным-давно, когда серия была неполной. Последняя статья о сети великолепна и должна очень помочь! - person Alex; 15.12.2009

Это очень интересный вопрос. К сожалению, нет простого ответа. Вам просто нужно хорошо понять проблему и выбрать решение, которое достаточно хорошо для вашего приложения.

Моей первой мыслью было, что сетевой протокол времени (NTP) для установки машинных часов с серверов NTP обратились к этому вопросу. Одна из затронутых там проблем касается буферов джиттера, которые включают изменение задержки пакетов. Это подробно описано в RFC 3393; Метрика изменения задержки IP-пакетов для показателей производительности IP (IPPM).

person Ewan Todd    schedule 12.12.2009
comment
Я изучу NTP, это действительно может дать некоторое представление о моей ситуации. - person Alex; 13.12.2009