# rpc 错误：code = Unavailable desc = 连接错误：desc = "transport：http2Client.notifyError 收到通知客户端传输已损坏 EOF"

- **ID:** `go/grpc-keepalive-too-frequent`
- **领域:** go
- **类别:** network_error
- **验证级别:** ai_generated
- **修复率:** 80%

## 根因

客户端 keepalive ping 频率高于服务器强制策略允许的值；服务器发送 GOAWAY 并关闭连接。

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| google.golang.org/grpc v1.55+ | active | — | — |

## 解决方案

1. **** (92% 成功率)
   ```
   kp := keepalive.ClientParameters{
    Time:                5 * time.Minute,
    Timeout:             20 * time.Second,
    PermitWithoutStream: false,
}
conn, _ := grpc.NewClient(addr,
    grpc.WithKeepaliveParams(kp),
    grpc.WithTransportCredentials(insecure.NewCredentials()),
)
   ```
2. **** (88% 成功率)
   ```
   s := grpc.NewServer(grpc.KeepaliveEnforcementPolicy(keepalive.EnforcementPolicy{
    MinTime:             10 * time.Second,
    PermitWithoutStream: false,
}))
   ```

## 无效尝试

- **** — Idle connections behind NAT/LB get silently dropped; subsequent RPCs fail with Unavailable. (70% 失败率)
- **** — Makes the problem worse — server enforces MinTime and closes the connection faster. (95% 失败率)
