В связи с окончанием технических работ и увеличением версии ядра до 0.22, хочу разъяснить, что мы получили в результате.
Подготовка к переходу на эту версию шла последние два месяца. Преймущественно сервер отлаживался локально, но некоторые изменения ядра проверялись и на основном сервере. С начала этой недели новое ядро было перенесено на игровой сервер, но, к сожалению, возникли проблемы и утечки при большом онлайне. Во вторник вечером эти проблемы были окончательно решены. Что было сделано в новом ядре:
- отладка сетевого модуля на нестабильных соединениях;
- перепись модуля отправки;
- исправление различных ошибок с буферизацией, очередью пакетов;
- переделка пула объектов;
- отказ от использования буферов в хипе в критических по скорости узлах;
- компиляция сервера с использованием .Net Framework 3.5;
- переделка некоторых утилитарных классов на структуры;
- другие внутренние правки и рефакторинг;
Такие правки привели к уменьшению количества дисконнектов почти в два раза (30-40 оффлайн игроков при 1600 онлайна, вместо 55-60 на старой версии) и понижению нагрузки на процессоры сервера в полтора-два раза (до 25-30%).
Другим полезным изменением является подсчет и отображение пинга каждого игрока, а также среднего и медианного пинга всех игроков на странице онлайн-статуса. По этим показателям можно определять состояние сервера и наличие лагов.