You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Isolate中运行Dart gRPC服务器时Socket流静默关闭排查求助

Dart gRPC服务器Socket接收流异常关闭排查

问题概述

我基于Flutter/Dart开发的gRPC服务器偶尔会出现静默断开连接的情况,此时客户端会收到如下GrpcError:
HTTP/2 error: Connection error: Connection is being forcefully terminated. (errorCode: 10)

异常细节

  • 服务器不会立刻感知到异常,只有当客户端收到错误并关闭流式RPC后,才会触发我编写的自定义关闭逻辑
  • Wireshark抓包结果确认:服务器主动发起了连接关闭操作,客户端是后续响应方
  • 问题已定位到dart-grpc依赖的Socket组件:接收消息的Stream<Uint8List>触发了关闭事件,其onDone回调抛出上述错误并终止连接
  • 仅接收流出现异常,发送端的IOSink仍正常工作——grpc库还能向客户端发送错误信息和尾部数据

触发场景与疑问

  • 接收流的关闭无固定规律:有时在通过流式RPC发送命令并收到客户端响应后立即触发,有时会在10分钟后才出现
  • 无法找到Socket(特指ServerSocket)的底层实现代码,无法确认触发流结束并调用onDone回调的具体原因
  • 问题是在将gRPC服务器迁移到单独Isolate后出现的,但同期也进行了服务器代码重构,无法确定是否与Isolate迁移直接相关

补充信息

自2025年3月27日起,该Bug突然无法复现,怀疑是外部因素导致(如网络波动、防火墙规则变更或系统配置调整)

核心疑问

什么原因会导致Socket的接收流(Stream<Uint8List>)单独关闭?


内容的提问来源于stack exchange,提问作者ljbkusters

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 18:22:33