Если сервер или промежуточный сервер различает соединения по IP или ID устройства, два клиента на одном ПК (с одним публичным IP) считаются одним игроком.
Почему Таблица сессий строится по IP или по IP + ID устройства → Следствие Данные второго клиента перезаписывают первую сессию или смешиваются с ней → На экране В одном клиенте не видно NPC, а в другом случается дисконнект или приходят чужие данные
Один из клиентов на одном ПК, Все в одном доме, Один регион или провайдер
Когда
Сразу после входа или техработ
Ответственные
Основной ответственный Команда разработки · Разработка сервера · Совместно Команда разработки · Разработка клиента
Команда разработки: задачи
Сервер: и на сервере, и на промежуточных серверах различать соединения по уникальному сессионному токену; исправить обязательно, потому что та же проблема бывает у нескольких игроков из одного дома (за NAT роутера) и у абонентов мобильных сетей, где оператор выдаёт один IP многим абонентам (CGNAT). Клиент: использовать отдельный сессионный токен для каждого запущенного клиента.
На графике
Высоко только у некоторых · число одновременных сессий с одного публичного IP, число перезаписей сессий
Где смотреть
Писать в логи сервера и промежуточного сервера ключ поиска сессии, сессионный токен, IP и порт клиента и смотреть, менялась ли существующая сессия в момент второго подключения с того же IP. Воспроизводится, если запустить по очереди два клиента на одном ПК
Подтверждает
В момент подключения второго клиента меняются адрес или данные персонажа в первой сессии, и такие же дисконнекты видны у других игроков за тем же роутером или мобильным подключением (CGNAT)
Опровергает
Если две сессии с одного IP держатся раздельно с разными токенами, причина не эта. Если два процесса используют один локальный порт, это конфликт фиксированного UDP-порта