refactor(websocket): 移除连接池模式并改进资源清理

移除 WebSocket 连接池实现,改为单连接模式以简化代码结构
在 main 函数中添加资源清理逻辑,确保程序退出时正确关闭所有资源
改进 base64 数据处理逻辑,支持递归处理嵌套结构中的敏感数据

呵呵线程池加WS是神人
This commit is contained in:
2026-01-23 18:24:59 +08:00
parent 38bb10ccd9
commit cd5875be24
4 changed files with 129 additions and 460 deletions

21
main.py
View File

@@ -158,12 +158,13 @@ async def main():
else:
logger.warning(f"插件目录不存在 {plugin_path}")
websocket_client = None
try:
# 初始化代码执行器
code_executor = initialize_executor(config)
# 使用连接池模式初始化 WebSocket 客户端
websocket_client = WS(code_executor=code_executor, use_pool=True)
# 初始化 WebSocket 客户端
websocket_client = WS(code_executor=code_executor)
# 启动代码执行器的后台 worker
logger.debug("[Main] 检查是否需要启动代码执行 Worker...")
@@ -174,10 +175,21 @@ async def main():
logger.warning("[Main] 未启动代码执行 Worker因为 Docker 客户端未初始化或连接失败。")
await websocket_client.connect()
except asyncio.CancelledError:
logger.info("主任务被取消,正在停止...")
finally:
logger.info("正在清理资源...")
if observer.is_alive():
observer.stop()
observer.join()
if websocket_client:
await websocket_client.close()
# 关闭浏览器管理器
await browser_manager.shutdown()
logger.success("资源清理完成,程序退出。")
if __name__ == "__main__":
@@ -193,8 +205,9 @@ if __name__ == "__main__":
try:
asyncio.run(main())
except KeyboardInterrupt:
main_logger.info("程序已被用户中断")
exit(0)
# 捕获 KeyboardInterrupt不做任何操作让 asyncio.run 正常结束
# 这样 main 函数中的 finally 块会被执行
pass
except Exception as e:
main_logger.exception("程序发生未处理的全局异常")