grpc-go中,服务器如何终止一个双向的stream?

按照 grpc-go 的文档,双向stream按如下的方式实现:

func (s *routeGuideServer) RouteChat(stream pb.RouteGuide_RouteChatServer) error {
    for {
        in, err := stream.Recv()
        if err == io.EOF {
            return nil
        }
        if err != nil {
            return err
        }
        key := serialize(in.Location)
                ... // look for notes to be sent to client
        for _, note := range s.routeNotes[key] {
            if err := stream.Send(note); err != nil {
                return err
            }
        }
    }
}

我现在想加入超时的机制,如果客户端在一定时间(例如30秒)内没有发送任何数据,即这里的 stream.Recv 被阻塞超过30秒,就把 stream 关了。但是我没有在文档里找到任何关于这种操作的信息,请问我该如何解决这个问题?谢谢

查看回复