• nextjs 致命未解问题! sse 连接断开事件无法获取
  • 发布于 1周前
  • 78 热度
    5 评论
  • 原木风
  • 40 粉丝 39 篇博客
  •   
在 nodejs 模式下没问题。 但是在 vercel 或者 firebase 里运行时。 客户端发起的 sse 连接,当客户端断开连接时,服务端拿不到中断事件,服务端会运行到函数正常结束。这在 ai chat 类产品里很致命,用户停止事件拿不到导致服务端持续运行请求造成额外的 token 消耗。大佬们有没有解决办法呢?
用户评论
  • Zappos
  • 提 issue 吧,50804 虽然说已解决,但是翻到那条 pull 的最下面评论说了有些 node 版本下依然不行。有些功能在不同 node 版本下时好时坏太正常了,或许升级/降级就解决了。
  • 2025/5/16 8:44:00 [ 0 ] [ 0 ] 回复
  • Cactus
  • 昨天恰好碰到使用 server actions 处理 stream text 时无法中断的问题,ai sdk 里说 rsc 还不支持 abortSignal ,只能改成 API 了。。
  • 2025/5/16 8:35:00 [ 0 ] [ 0 ] 回复
  • APAC
  • 有个办法是客户端跑路前发一个中断请求,告诉服务端这个对话可以终止了,当然有时候这个断开连接是意外导致的,比如关掉浏览器、页面崩溃,没法保证中断请求一定能正常发出,只能说这样至少能挽回一部分损失。另外问个问题,vercel 的 AI SDK 基本是针对 Next.js 设计的,我用 Nest.js 的时候总是感觉不太好用,但是好像也没其他选择?
  • 2025/5/16 8:24:00 [ 0 ] [ 0 ] 回复
  • 弄潮儿
  • 先排除 vercel 或者 firebase 的因素,会不会是 client 断开了到 vercel 的连接,但是 vercel 没有断开到你部署的 app 的连接?找一个 vps 或者虚拟机进行部署。然后你的 nextjs 的 route-handler 部分具体是怎么写的,有没有参照官方的写法 aHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vcm91
    dGluZy9yb3V0ZS1oYW5kbGVycyNzdHJlYW1pbmcK (参考其中 streaming 和 ai-sdk 的部分)
  • 2025/5/16 8:20:00 [ 0 ] [ 0 ] 回复