惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
雷峰网
雷峰网
S
SegmentFault 最新的问题
博客园 - 【当耐特】
博客园_首页
量子位
爱范儿
爱范儿
博客园 - 叶小钗
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Jina AI
Jina AI
V
V2EX
美团技术团队
V
Visual Studio Blog
博客园 - 三生石上(FineUI控件)
IT之家
IT之家
Hugging Face - Blog
Hugging Face - Blog
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
博客园 - 聂微东
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Cloudflare Blog
宝玉的分享
宝玉的分享
WordPress大学
WordPress大学
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания
Как мы перестали терять игроков/пользователей при рестарт...
abdullin-rai · 2026-05-13 · via Все публикации подряд на Хабре

Уровень сложностиСредний

Время на прочтение2 мин

Охват и читатели20

Кейс

Одной из задач, которую мне нужно было решить, являлась проблема обрыва соединений сокета от клиентов к серверу, при перезапуске сервера.

Контекст: 

В realtime мультиплеер игре позиции и действия игроков передаются через сервер, посредством сокета (и websockets). Online игроки есть всегда, и при обновлении сервера или перезапуске, все игроки теряли соединение и соответственно игровой процесс рушится, то есть это негативное влияние на UX

Обычно, в играх и других неигровых приложениях, проихсодит переподключение в фоне, а если переподключиться не удалось, то отображается сообщение о перезапуске сервера и с просьбой подождать некоторое время.

Казалось бы, ничего страшного. Но ведь можно по-другому, верно?

Этот опыт применим не только для игровых серверов, но и для любых проектов, в которых используются сокетные соединения и разрыва соединения влияет на UX

Что было сделано:

Перебрав много вариантов, я остановился на архитектурном решении с созданием тонкой прослойки, которая будет принимать и держать соединения, и все данные из/в сокеты будет транслировать в производительный Redis Pub/Sub, к которому уже будет подключен backend с бизнес-логикой. 

Вот схема

Результат:

В итоге это дало возможность обновлять backend сервер практически безболезненно и решило основную проблему. 

Как следствие UX улучшился, что уменьшает количество недовольных пользователей (игроков) и негативных отзывов в сторах приложений

Конечно, есть и минусы.

Несуществует идеальных вариантов, но в данном случае получаемый профит от этой фичи был выше, чем получаемые недостатки

И так, недостатки:

  • Увеличивает задержку, в нашем случае добавило 1-5ms задержки для игроков. Но есть пространство для оптимизации и улучшения. И в нашем случае эта задержка была незначительна

  • Усложняется архитектура. Как говорят инженеры “Лучшая деталь та, которой нет”, так как если детали нет, то и ломаться нечему :) В нашем случае добавляется дополнительный слой, о котором нужно помнить. Но при наличии хороших IT-процессов проблем будет очень мало

  • Усложняется отладка. Так как данные проходят больше компонентов, время на поиск проблемы незначительно увеличивается 

Повторюсь, что в нашем случае самым значимым недостатком была задержка, но и она незначительна для нас.

А это значит что получаемый профит от этой фичи больше, чем цена, которую заплатили за нее. Именно к таким техническим решениям я стремлюсь, в ходе работы

Кто сталкивался с подобной проблемой? Как решали?