У меня есть начало небольшой многопользовательской игры, которую я пишу на питоне в качестве учебного упражнения. В настоящее время сервер работает со скоростью 10 кадров в секунду, а клиенты работают с любой скоростью, которая им нравится. Это хорошо работает для экономии полосы пропускания, но если клиент не сообщает серверу, когда произошел его ввод, весь ввод квантуется до интервалов в 100 мс. Как я могу синхронизировать время между клиентом и сервером, чтобы я мог внести эти исправления? Основным препятствием здесь является то, что мне нужно определить время пинга и компенсировать его.
Синхронизация времени между простым сервером на основе сокетов python и клиентами
Ответы (2)
Я случайно наткнулся на мучительно прекрасную запись в блоге о том, как реализовать физику распределенной сети в общий (без традиционного клиентского предсказания). Я настоятельно рекомендую его вместе со слайдами GDC, представленными Фидлером пару лет назад. Удачи!
Это очень интересный вопрос. К сожалению, нет простого ответа. Вам просто нужно хорошо понять проблему и выбрать решение, которое достаточно хорошо для вашего приложения.
Моей первой мыслью было, что сетевой протокол времени (NTP) для установки машинных часов с серверов NTP обратились к этому вопросу. Одна из затронутых там проблем касается буферов джиттера, которые включают изменение задержки пакетов. Это подробно описано в RFC 3393; Метрика изменения задержки IP-пакетов для показателей производительности IP (IPPM).