
Как мы перестали терять игроков/пользователей при рестарте сервера: Thin WebSocket Gateway + Redis»
abdullin-rail 1 час назад Как мы перестали терять игроков/пользователей при рестарте сервера: Thin WebSocket Gateway + Redis» Средний 2 мин 1.9K Go * Python * Кейс Одной из задач, которую мне нужно было решить, являлась...
Anthropic — What company has the best second artificial intelligence model at the end of June?
В сфере искусственного интеллекта произошло заметное событие. abdullin-rail 1 час назад Как мы перестали терять игроков/пользователей при рестарте сервера: Thin WebSocket Gateway + Redis» Средний 2 мин 1. 9K Go * Python * Кейс Одной из задач, которую мне нужно было решить, являлась проблема обрыва соединений сокета от клиентов к серверу, при перезапуске сервера. Контекст: В realtime мультиплеер игре позиции и действия игроков передаются через сервер, посредством сокета (и websockets).
Online игроки есть всегда, и при обновлении сервера или перезапуске, все игроки теряли соединение и соответственно игровой процесс рушится, то есть это негативное влияние на UXОбычно, в играх и других неигровых приложениях, проихсодит переподключение в фоне, а если переподключиться не удалось, то отображается сообщение о перезапуске сервера и с просьбой подождать некоторое время. Казалось бы, ничего страшного. Но ведь можно по-другому, верно?
Технические детали
Этот опыт применим не только для игровых серверов, но и для любых проектов, в которых используются сокетные соединения и разрыва соединения влияет на UXЧто было сделано:Перебрав много вариантов, я остановился на архитектурном решении с созданием тонкой прослойки, которая будет принимать и держать соединения, и все данные из/в сокеты будет транслировать в производительный Redis Pub/Sub, к которому уже будет подключен backend с бизнес-логикой. Вот схемаРезультат:В итоге это дало возможность обновлять backend сервер практически безболезненно и решило основную проблему. Как следствие UX улучшился, что уменьшает количество недовольных пользователей (игроков) и негативных отзывов в сторах приложенийКонечно, есть и минусы.
Несуществует идеальных вариантов, но в данном случае получаемый профит от этой фичи был выше, чем получаемые недостаткиИ так, недостатки:Увеличивает задержку, в нашем случае добавило 1-5ms задержки для игроков. Но есть пространство для оптимизации и улучшения. И в нашем случае эта задержка была незначительнаУсложняется архитектура.
Как говорят инженеры “Лучшая деталь та, которой нет”, так как если детали нет, то и ломаться нечему :) В нашем случае добавляется дополнительный слой, о котором нужно помнить. Но при наличии хороших IT-процессов проблем будет очень малоУсложняется отладка. Так как данные проходят больше компонентов, время на поиск проблемы незначительно увеличивается Повторюсь, что в нашем случае самым значимым недостатком была задержка, но и она незначительна для нас.
А это значит что получаемый профит от этой фичи больше, чем цена, которую заплатили за нее. Именно к таким техническим решениям я стремлюсь, в ходе работы Кто сталкивался с подобной проблемой?
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





