Python GUI 应用里的 WebSocket 服务端调试心得
约 1 分钟· 353 字 540 次阅读
LAN 聊天系统的服务端最近在调试 WebSocket 部分。Python 负责 GUI 和核心逻辑,前端用浏览器接入。整个链路跑通后,记录几个关键点。
事件循环的纠缠
GUI 框架有自己的事件循环,WebSocket 库也有自己的 loop。直接混用很容易卡住界面或收不到消息。常见的处理方式是:
- 在独立线程里跑
asyncioloop - GUI 通过队列或回调与网络线程通信
- 关闭应用时确保 loop 和连接都干净退出
async def start_server():
async with websockets.serve(handler, "0.0.0.0", 8765):
await asyncio.Future() # 保持运行
浏览器端的 confirm 替换
项目里之前用了很多原生 confirm(),不同浏览器表现不一致。后来统一改成自定义模态对话框,由 WebSocket 服务端确认后再执行关键操作。体验稳定了很多,也更容易做主题适配。
日志是调试的生命线
发布前一定要检查日志清洁度。我们曾经因为一条被忽略的异常导致 release 包行为异常。现在打包前会专门跑一轮日志审查:
- 确认没有未处理的异常堆栈
- 移除调试用的
print - 检查日志级别配置
WebSocket 本身不复杂,但把它安安稳稳地放进 GUI 生命周期里,需要多想几步。