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

Also available as: JSON · Markdown · 中文
80%Fix Rate
86%Confidence
0Evidence
2024-10-04First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
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

  1. 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)
    }
  2. 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:

  1. 90% fail

    Recv returns io.EOF or error; ignoring it loops forever on a dead stream.

  2. 70% fail

    Long-lived streams (e.g., subscriptions) should use context.Background() plus server-driven heartbeats, not a fixed deadline.