首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >多个智能体会话共享资源,服务停机应该等谁?

多个智能体会话共享资源,服务停机应该等谁?

原创
作者头像
用户12764955
发布于 2026-10-10 11:08:44
发布于 2026-10-10 11:08:44
50
举报

设想一个 Node.js 服务,同时运行几个智能体会话,它们共用应用级 MCP host 和存储。某个会话先结束了,服务马上销毁共享连接,其他会话可能还在收尾;反过来,如果只等聊天回复结束就退出,也可能漏掉最后的历史提交。

停机要等的不是“最后一条文字”,而是资源的全部使用者。Tansr 的会话收尾回执与 MCP 所有权规则可以帮助宿主判断这件事,但停止新请求、汇总所有会话以及管理公共资源,仍是应用责任。

先画所有权,再决定关闭顺序

通过会话配置创建的 MCP 资源由该会话拥有;显式传入的应用级 McpHost 则是借用。前者跟随自己的生命周期处理,后者必须等全部使用者完成后,再由应用调用 dispose。

共享存储也类似。SDK 不会因为某个会话结束,就替宿主关闭借用的 store。一个会话确认完成,不代表别的会话已经停止提交,更不代表整个存储目录已经可以迁移。

因此,资源表不只要记录“连接到了哪里”,还要记录“谁创建、谁借用、谁负责最后关闭”。这种区分比统一在每个会话结束时执行一遍清理更重要。

停机过程应分层确认

应用首先应停止接收会继续使用这些资源的新工作,再按自己的完成或中止策略处理已有会话。这是宿主的入口管理,不能指望会话 SDK 替整台服务关闭请求入口。

对需要关闭的会话,closeAsync 先逻辑关闭,再等待真实收尾;如果只需要继续观察已经发起的收尾,可以使用 drain。涉及最终历史时,应明确是否要求 flushStore,并确认所观察结果为 completed。默认的 flushStore:false,不能被解释成已经要求了最终刷新。

所有相关使用者确认完成后,应用才处理共享 host 和存储,再结束宿主自己的后台任务。仅收到 session.ended 或等到 idle,并不足以替代这一组确认。接口和边界见关闭会话与等待资源收尾。

不要用超时冒充完成

收尾等待可能返回 timeout、cancelled 或 failed。超时与取消只终止本次观察,底层工作仍可能继续。此时把共享资源立即认定为空闲,会让“给停机设上限”变成“把未确认状态藏起来”。

更合理的宿主策略是保留未完成会话与诊断结果,决定继续等待、排查适配器,或者按明确的强制退出策略结束。原始错误 cause 可能包含敏感信息,监控与前端应使用经过筛选的诊断字段。

force 是已关闭会话的异常收尾选项,不是成功开关。它可能释放自有资源并返回结构化失败;即使本地传输层完成,也不保证远端服务或任何未登记子进程都已停止。应用自己启动的工作,需要自己登记和确认。

如果资源根本不跨会话共享,就不必为了复用引入公共连接池。确实有多个使用者时,Tansr 的价值在于把会话收尾与资源归属暴露给宿主,让停机判断有明确对象;最终的应用退出策略仍需团队自己决定,不能由一个会话的 completed 代替全服务的结论。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 先画所有权,再决定关闭顺序
  • 停机过程应分层确认
  • 不要用超时冒充完成
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档