
За пределами QNetworkAccessManager: проектируем типобезопасный HTTP Runtime для Qt на C++20
mdanilov 6 минут назад За пределами QNetworkAccessManager: проектируем типобезопасный HTTP Runtime для Qt на C++20 Средний 8 мин 222 C++ * Qt * Программирование * Проектирование API * Кейс Из песочницы Небольшая...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
В сфере искусственного интеллекта произошло заметное событие. mdanilov 6 минут назад За пределами QNetworkAccessManager: проектируем типобезопасный HTTP Runtime для Qt на C++20 Средний 8 мин 222 C++ * Qt * Программирование * Проектирование API * Кейс Из песочницы Небольшая предысторияНесколько лет назад был реализован компонент выгрузки данных во внутренний бэкэнд компании. В какой‑то момент, как это часто бывает, пришлось временно переключиться на помощь другой команде и в авральном режиме закрывать проект. В результате задачи по развитию приложения, включая переход на новый бэкэнд, были мной отложены.
Через пару месяцев я вернулся к этой части системы и обнаружил, что вместо адаптации существующего решения появился классический Ctrl+C → Ctrl+V. В качестве сообщений использовался огромный std::variant, который передавался между потоками через QEventLoop, сигналы и слоты Qt. Со временем этот тип разросся настолько, что превратился в универсальный контейнер «на все случаи жизни».
Технические детали
Сам код приводить не буду — там слишком много однотипной логики и довольно внушительная коллекция анти‑паттернов. Но именно этот опыт и подтолкнул меня к мысли полностью пересмотреть подход, переписать компонент и сделать его действительно thread‑safe, избавившись от лишнего копирования, чрезмерной связности и зависимости от внутренней механики Qt. ВведениеQt предоставляет достаточно удобный сетевой стек в виде QNetworkAccessManager, однако при разработке крупных приложений довольно быстро начинают проявляться типичные проблемы: большое количество шаблонного сетевого кода, дублирование обработки ошибок, отсутствие compile‑time гарантий соответствия между Request и Response, ручная реализация retry‑механизмов, таймауты, разбросанные по приложению, сложность корректного завершения запросов при shutdown и проблемы управления жизненным циклом QNetworkReply.
В этой статье я хочу показать архитектуру небольшого HTTP runtime, построенного поверх Qt Network и современного C++20. Она предоставляет контракты через concepts, типобезопасные модели запросов и ответов, callback— и future—ориентированные API, настраиваемые политики повторных попыток с экспоненциальной задержкой, корректное завершение работы, централизованное управление жизненным циклом запросов и выделенный поток обработки I/O, в котором также выполняется конструирование моделей сообщений. Как выглядит API и что находится внутриХотелось получить максимально простой пользовательский код вместо классического подхода с использованием Qt Network.
В идеале работа с HTTP‑запросами должна выглядеть как обычный вызов типобезопасного API, скрывая всю инфраструктуру выполнения. Например:auto response = server . wait(); if (response.
send( , (UserResponse response) { ...
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.





