从解决 RDP 盲操作到折腾 MS Store 上架:RDP Heartbeat 诞生记
2026-03-29
Tags: 开发手记 · 产品 · RDP · Windows
前言:Vibe Coding 时的"不速之客"
我经常会连着一台走 UDP 协议的 RDP(远程桌面)机器写代码,进入那种专注而放松的 "vibe coding" 状态。
在这个过程中,不可避免地会遇到一些耗时的操作:比如等待一个响应缓慢的 API,或者脚本正在后台进行漫长的静默处理。这时候,屏幕上的画面定格在一个窗口很久,这再正常不过了。通常我都不去管它,切出去看看网页,或者靠在椅背上等它自己跑完。
但后来我发现了一个让人极其抓狂的现象:有时候任务其实早就跑完了,只是我的 RDP 画面彻底卡住了。
我不确定纯 TCP 连接下是不是也有这个毛病(毕竟 TCP 延迟相对较高,我更偏爱 UDP 的丝滑),但在 UDP 模式下,这种"薛定谔的假死"确确实实存在。
最糟糕的设定:它没有断开,它只是瞎了
如果网络不好,RDP 直接弹个窗告诉我"连接已断开",那倒反而是件好事——至少我知道该重连了。
但最折磨人的是,画面虽然不再更新,但键盘和鼠标事件居然还是响应的!
想象一下那个画面:我看着一个静止的屏幕,以为脚本还没跑完。等得不耐烦了,试探性地动动鼠标,画面毫无波澜。我又盲目地胡乱点了几下,敲了几次回车,企图唤醒它……结果依然是一片死寂。
最后,只能无奈地手动关掉 RDP 窗口,再重新连回去。连上之后才惊恐地发现,**刚才那几下"盲狙"和乱敲,全都在远程机器上真实执行了。**这种失去视觉反馈的操作,简直是开发者的噩梦。
不要复杂的面板,只要一眼的安心
面对这个问题,我的诉求其实极其简单且纯粹:我只想要一个小东西,让它永远安静地浮在屏幕的角落里。
只要它在闪,我就知道画面还在实时更新,可以安心地继续等 API 响应;如果它卡住不动了,我就能立刻反应过来:"哦,又假死了,该重连了",从而完美避开一波盲目操作的灾难。
一个意外之喜:玄学般的"保活"效果
于是,RDP Heartbeat 诞生了。它被设计得尽可能没有存在感——支持鼠标穿透,绝对不干扰正常操作。它唯一的使命,就是为你提供远程工作时最需要的那一点点"视觉确认感"。
但有趣的事情发生了:在有了它之后,我发现 RDP 画面假死的情况竟然极少发生了。
这完全是个意外之喜。我个人的猜测是:因为这个呼吸灯在屏幕角落一直在进行像素级的刷新,这种持续的画面更新反而成了一种应用层的"保活(Keep-alive)"机制,让 RDP 会话一直保持着活跃的数据流。不过诚实地说,我并没有去深入研究底层的网络协议机制,所以不敢妄下断言。总之,它就是玄学般地好用了。
既然做都做了,不如上架吧(以及踩过的坑)
看着这个在角落里默默闪烁的小东西,我觉得既然做都做了,说不定其他深受其害的开发者也能用上,于是决定把它上架到 Microsoft Store。
事实证明,这是一个极其折磨人的决定。
因为我是用 Python 写的,整个打包上架流程简直是一部血泪史:Python 源码 → PyInstaller 打包为 exe → Inno Setup 制作安装包 → 最终转成 MSIX package。相比于原生 WinUI 3 那种顺滑的打包体验,这套流程可以说是山路十八弯。
另外我也必须承认,用 Python 做的桌面应用,在视觉的精致度上确实还差那么一点意思。
未来的计划
后面有时间的话,我打算写一篇文章,详细分享一下这套 Python 到 MSIX 的打包全流程。虽然它肯定不是最优解,但至少是一条能走通的路,希望能帮到想把 Python 小工具上架商店的朋友。
至于 RDP Heartbeat 本身,我希望等手头的其他项目告一段落后,能抽出时间用原生的 WinUI 3 将它彻底重构一遍,让这个小小的呼吸灯变得更加丝滑、优雅。
如果你也经常面对静止的远程屏幕发呆,或者总是被 RDP 猝不及防的假死所折磨,不妨下载试试这个小玩意儿,希望它能帮你守护住每一次 vibe coding 时的好心情。