Skip to content

От слепых операций RDP до публикации в MS Store: история создания RDP Heartbeat

2026-03-29

Tags: [Дневник разработчика](/ru/blog/tags/#Дневник разработчика) · Продукты · RDP · Windows

Пролог: Незваный гость во время vibe coding

Я часто подключаюсь к RDP-машине по UDP, чтобы писать код, погружаясь в то сфокусированное и расслабленное состояние «vibe coding».

В процессе неизбежно встречаются длительные операции: ожидание медленного API или скрипта, обрабатывающего что-то в фоновом режиме. Когда экран замирает на одном окне надолго — это совершенно нормально. Обычно я просто не обращаю внимания, открываю браузер или откидываюсь в кресле.

Но потом я обнаружил невероятно раздражающий феномен: иногда задача давно завершилась — просто мой экран RDP полностью завис.

Не уверен, страдают ли чистые TCP-подключения от той же проблемы (задержка TCP относительно высока, а я предпочитаю плавность UDP), но в режиме UDP это «замерзание Шрёдингера» определённо существует.

Худший сценарий: Не отключился — просто ослеп

Если сеть плохая и RDP показывает окно «Соединение разорвано» — это на самом деле хорошо, по крайней мере я знаю, что нужно переподключиться.

Самое мучительное: хотя экран больше не обновляется, события клавиатуры и мыши всё ещё отправляются!

Представьте картину: я смотрю на замершый экран, думая, что скрипт ещё работает. В нетерпении шевелю мышью — экран не реагирует. Слепо кликаю, жму Enter несколько раз, пытаясь «разбудить»... тишина.

В конце концов закрываю окно RDP и подключаюсь заново. Только тогда с ужасом обнаруживаю: все эти слепые клики и нажатия были реально выполнены на удалённой машине. Работа без визуальной обратной связи — худший кошмар разработчика.

Никаких сложных панелей — просто один успокаивающий взгляд

Моё требование было крайне простым и чистым: маленькая штучка, тихо плавающая в углу экрана навсегда.

Если она мигает — я знаю, что экран обновляется в реальном времени, и могу спокойно ждать ответа API. Если останавливается — сразу понимаю: «Ага, опять завис, пора переподключаться» — идеально избегая катастрофы слепых операций.

Счастливая случайность: Магический эффект «Keep-Alive»

Так родился RDP Heartbeat. Спроектированный быть максимально незаметным — click-through, абсолютно не мешающий обычной работе. Его единственная миссия: дать вам ту каплю «визуального подтверждения», которая нужнее всего при удалённой работе.

Но произошло нечто интересное: после начала его использования зависания экрана RDP стали невероятно редкими.

Это стало полной неожиданностью. Моя гипотеза: поскольку этот пульсирующий огонек постоянно обновляет пиксели в углу экрана, это непрерывное обновление работает как механизм «keep-alive» на уровне приложения, поддерживая активный поток данных для сессии RDP. Честно говоря, я не углублялся в механизмы сетевых протоколов, так что не могу утверждать наверняка. Одним словом: работает как по волшебству.

Раз уж сделал, почему бы не опубликовать (и ямы на этом пути)

Глядя на эту маленькую мигающую штучку в углу, я подумал, что другие разработчики с такой же болью тоже могут ей воспользоваться. И решил опубликовать в Microsoft Store.

Оказалось, что это было невероятно мучительное решение.

Поскольку я писал на Python, весь процесс упаковки и публикации превратился в одиссею крови и слёз: Исходный код Python → exe через PyInstaller → инсталлятор Inno Setup → и наконец пакет MSIX. По сравнению с плавным опытом упаковки нативного WinUI 3, этот конвейер — горная дорога с восемнадцатью поворотами.

Также должен признать, что десктопное приложение на Python немного уступает в визуальной отделке.

Планы на будущее

Когда будет время, планирую написать подробную статью обо всём процессе упаковки от Python до MSIX. Это точно не оптимальное решение, но это рабочий путь — надеюсь, он поможет тем, кто хочет опубликовать свои Python-инструменты в Store.

Что касается самого RDP Heartbeat, надеюсь найти время полностью переписать его на нативном WinUI 3, чтобы этот маленький пульсирующий огонёк стал ещё более плавным и элегантным.

Если вы тоже часто смотрите на замерзшие удалённые экраны или страдаете от внезапных зависаний RDP, попробуйте этот маленький инструмент. Надеюсь, он сохранит хорошее настроение в каждом вашем сеансе vibe coding.

Скачать из Microsoft Store

Узнать больше о RDP Heartbeat