Если игра занята и поздно забирает пакеты из сокета (интерфейса ОС для приёма и отправки данных по сети), буфер ОС переполняется.
Почему Кадры запаздывают, и игра поздно читает сокет → Следствие Буфер приёма ОС заполняется: UDP-пакеты отбрасываются, а TCP уменьшает окно приёма и заставляет отправителя остановиться → На экране Телепортация (UDP) или перемотка (TCP)
Основной ответственный Команда разработки · Разработка клиента
Команда разработки: задачи
Вынести приём в отдельный поток, подобрать размер буфера (SO_RCVBUF).
Цифры для ориентира
Буфер приёма по умолчанию, в зависимости от ОС и настроек, от десятков до сотен KB. Обновления в людном месте могут достигать сотен KB в секунду.
На графике
Растёт вслед за онлайном и нагрузкой · число UDP-пакетов, отброшенных буфером приёма, время кадра
Где смотреть
Записывать в Системном мониторе Windows Microsoft Winsock BSP\Dropped Datagrams (число UDP-пакетов, отброшенных из-за нехватки буфера приёма сокета) и UDPv4\Datagrams Received Errors вместе со временем кадра, а в игре считать пропуски в порядковых номерах полученных пакетов
Подтверждает
В людных местах или сразу после долгого кадра растёт Dropped Datagrams, и в те же моменты появляются пропуски в номерах пакетов. Потерь на линии связи в это время нет
Опровергает
Если Dropped Datagrams не растёт, а номера всё равно пропадают, это потери на маршруте
Чем проверить
Проверка на стороне игрока
Источники
socket(7) — Linux manual pageLinux man-pages SO_RCVBUF задаёт максимальный размер буфера приёма сокета, значение по умолчанию берётся из rmem_default, максимум из rmem_max (Android тоже работает на ядре Linux)
RFC 9293: Transmission Control Protocol (TCP)IETF Поле окна TCP показывает, сколько ещё байт готов принять получатель. При 0 отправитель только шлёт пробы нулевого окна (zero window probe) и ждёт
Low Latency Workloads Management and OperationsMicrosoft Dropped Datagrams и Dropped Datagrams/sec из набора счётчиков Microsoft Winsock BSP: число UDP-пакетов, отброшенных потому, что они приходили быстрее, чем приложение успевало их обрабатывать, или не хватило буфера приёма сокета