Christmas Patriarch

Интернет-оптимизация Killing Floor Dedicated Server

Мощное железо и широкий канал сами по себе не гарантируют плавную игру в Killing Floor. Сервер на Unreal Engine может иметь хороший ping в браузере, но игроки все равно будут видеть рывки, скачущий ping, packet loss, “фантомные” попадания и вылеты при смене карт.

Цель гайда - показать KF1-админам, как читать сетевую статистику, где искать узкое место и какие параметры IpDrv.TcpNetDriver действительно имеют смысл.

Коротко: что настраивать первым

СимптомЧто проверитьГде смотреть
Ping скачет у всех игроковCPU tick time, tickrate, outgoing bandwidthstat net, inject userflag 1, мониторинг CPU
Packet loss только у одного игрокамаршрут до сервера и локальную сеть игрокаtracert, PingPlotter, stat net
Packet loss у многих игроковканал сервера, redirect, tickrateсерверный мониторинг, bytes/sec, packets/sec
Попадания “не засчитываются”ping, packet loss OUT, server authoritystat net, клиентский FPS
Долгие подключенияdownloads, redirect, InitialConnectTimeoutIpDrv.TcpNetDriver, HTTP redirect

Начинайте с диагностики. Слепое повышение NetServerMaxTickRate часто делает ощущения лучше для части игроков и хуже для всех остальных.

1. Ping, latency и bandwidth

Для сетевой игры важны две разные вещи:

Высокая пропускная способность не означает низкий ping. Можно иметь быстрый канал и плохой маршрут до конкретного игрока. Поэтому жалобу “сервер лагает” нужно проверять не только по скорости интернета, но и по маршруту, packet loss и нагрузке сервера.

2. Tracert и маршрут до сервера

Если проблема есть только у части игроков, пусть они проверят маршрут:

tracert server-ip-or-domain

Что искать:

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

3. stat net: главная диагностика в игре

На сервере или клиенте откройте консоль и выполните:

stat net

Важные поля:

ПолеЧто значит
Pingигровая задержка, не всегда равна ICMP ping
Channelsчисло релевантных actors, которые сервер ведет для клиента
Unordered/secпакеты, пришедшие не в том порядке
Packet loss INпотери от сервера к клиенту
Packet loss OUTпотери от клиента к серверу
Packets/secсколько пакетов идет в секунду
Bunches/secобновления actors в секунду
Bytes/secреальный поток данных
Netspeedлимит скорости подключения клиента

Packet loss должен быть 0. Разовые скачки бывают, но постоянное ненулевое значение означает, что игрок не получает или не отправляет часть игровой информации.

4. Почему F1 ping и stat net отличаются

Ping в таблице игроков и ping из stat net считаются по-разному. Клиентский FPS, tickrate сервера и момент отправки пакета влияют на результат, поэтому F1 может показывать красивую цифру, а игра все равно ощущается плохо.

Для диагностики важнее:

Если клиентский FPS падает ниже входящих packets/sec, игрок может ощущать “невидимую потерю пакетов”: статистика потерь чистая, но обработка пакетов запаздывает.

5. inject userflag 1: tickrate и CPU-time

Для расширенной проверки можно включить userflag:

inject userflag 1

Отключение:

inject userflag 0

Эта команда помогает увидеть максимальный tickrate и время последнего server tick. Используйте ее только для анализа: она создает дополнительный трафик и не нужна во время обычной игры.

Главная формула для оценки CPU:

net + act << 1000 / tickrate

Пример: при tickrate 50 один тик занимает 20 ms. Если сумма net + act регулярно близка к 20 ms, сервер не успевает держать такой tickrate.

6. Базовый блок IpDrv.TcpNetDriver

Основные параметры лежат в KillingFloor.ini:

[IpDrv.TcpNetDriver]
AllowDownloads=True
ConnectionTimeout=15.0
InitialConnectTimeout=150.0
AckTimeout=1.0
KeepAliveTime=0.2
MaxInternetClientRate=10000
MaxClientRate=20000
SimLatency=0
RelevantTimeout=5.0
SpawnPrioritySeconds=1.0
ServerTravelPause=4.0
NetServerMaxTickRate=30
LanServerMaxTickRate=35
DownloadManagers=IpDrv.HTTPDownload
DownloadManagers=Engine.ChannelDownload

7. Что здесь действительно менять

ПараметрПрактика
MaxInternetClientRateОбычно 10000-15000; выше только если клиенты и канал стабильно тянут
MaxClientRateLAN-лимит, можно держать 20000
NetServerMaxTickRateГлавный параметр плавности и нагрузки
LanServerMaxTickRateДля LAN или закрытых низкопинговых игр
InitialConnectTimeoutУменьшайте только при конкретных проблемах с “зависшими” подключениями
RelevantTimeoutОбычно оставить 5.0
SpawnPrioritySecondsОбычно оставить 1.0
ServerTravelPauseОбычно оставить 4.0

MaxInternetClientRate ограничивает поток от сервера к клиенту. Он не исправляет плохой маршрут от клиента к серверу и не лечит packet loss OUT.

8. Tickrate: стартовые значения

Tickrate - это server FPS. Чем выше tickrate, тем чаще сервер принимает и отправляет обновления. Это может улучшить отзывчивость, но увеличивает CPU и сетевую нагрузку.

Тип сервераСтартовый tickrateКомментарий
6 игроков, обычный KF30Хороший базовый вариант
12 игроков40Проверяйте bytes/sec и packet loss
12 игроков, хорошие клиенты45-50Только если у игроков нет потерь
20 игроков50-55Нужны хороший CPU, канал и тесты
Международный сервер30-40Маршруты важнее теоретической скорости

Для heavily-modded серверов, большого числа zeds или mutators начинайте ниже. Больше actors означает больше Channels и Bunches/sec, а значит больше данных для клиентов.

9. Как понять, что tickrate завышен

Tickrate слишком высок, если:

В таком случае снижайте NetServerMaxTickRate на 5 и повторяйте тест.

10. Windows и Linux серверы

Старые Linux-серверы Unreal/UT могли отправлять пакеты не так стабильно относительно NetServerMaxTickRate, даже когда CPU не был полностью занят.

Практический вывод:

На современных хостингах поведение может отличаться, но принцип диагностики остается тем же.

11. Downloads и HTTP redirect

AllowDownloads=True нужно для кастомного контента, но не стоит раздавать большие карты с игрового процесса. Когда игрок скачивает карту прямо с сервера, он конкурирует за канал с активными игроками.

Используйте HTTP redirect:

[IpDrv.HTTPDownload]
RedirectToURL=https://example.com/kf-redirect/
UseCompression=True

Если после включения redirect появились ошибки версий, проверьте, что файлы на redirect полностью совпадают с файлами сервера.

12. Клиентские настройки тоже важны

Даже идеальный сервер не исправит плохой клиентский netspeed, слабый FPS или фоновые программы.

Игрокам стоит проверить:

Для старого DSL/ISDN-класса соединений слишком высокий клиентский netspeed может создавать больше трафика, чем линия стабильно держит. Для современных соединений обычно достаточно серверных лимитов 10000-15000.

Рекомендуемый профиль для публичного сервера

[IpDrv.TcpNetDriver]
AllowDownloads=True
ConnectionTimeout=15.0
InitialConnectTimeout=150.0
AckTimeout=1.0
KeepAliveTime=0.2
MaxInternetClientRate=10000
MaxClientRate=20000
SimLatency=0
RelevantTimeout=5.0
SpawnPrioritySeconds=1.0
ServerTravelPause=4.0
NetServerMaxTickRate=30
LanServerMaxTickRate=35
DownloadManagers=IpDrv.HTTPDownload
DownloadManagers=Engine.ChannelDownload

Дальше поднимайте NetServerMaxTickRate постепенно: 30 -> 35 -> 40 -> 45 -> 50, каждый раз проверяя stat net, packet loss, CPU tick time и жалобы игроков.

Связанные страницы