go
runtime_error
ai_generated
true
rpc error: code = DeadlineExceeded desc = context deadline exceeded while receiving from stream
ID: go/grpc-context-deadline-exceeded-stream
80%Fix Rate
86%Confidence
0Evidence
2024-10-04First Seen
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| google.golang.org/grpc 1.52+ | active | — | — | — |
Root Cause
A server-streaming or bidirectional-streaming RPC exceeded the client context deadline while waiting for the next message.
generic中文
服务端流式或双向流式 RPC 在等待下一条消息时超过了客户端上下文截止时间。
Workarounds
-
92% success
Loop correctly and check ctx: for { msg, err := stream.Recv() if err == io.EOF { break } if err != nil { if errors.Is(err, context.DeadlineExceeded) { /* re-dial */ } return err } handle(msg) } -
88% success
For long-lived streams, use context.Background() and implement server-side heartbeat messages; reconnect on stream error with backoff.
Dead Ends
Common approaches that don't work:
-
90% fail
Recv returns io.EOF or error; ignoring it loops forever on a dead stream.
-
70% fail
Long-lived streams (e.g., subscriptions) should use context.Background() plus server-driven heartbeats, not a fixed deadline.