服务器错误:rpc 错误:代码 = 不可用 desc = 传输正在关闭”在 gRPC 中

问题描述

我有一个 grpc 服务器和一个客户端(在我的博客项目中)。当我运行服务器时,似乎一切正常,当我运行客户端时,我遇到了这个错误,服务器和客户端都关闭了。

rpc error: code = Unavailable desc = transport is closing

我认为错误与这段代码有关:

func newPost(c proto_blog.BlogServiceClient) {
    fmt.Println("Starting to do a Unary RPC")
    req := &proto_blog.ReqNewPost{
        Title: "How can we make an gRPC server?",Content: "First You have to.....\nAt the end,you have to....",Author: "Arsham Ahora",Date: fmt.Sprint(time.Now()),}

    res,err := c.NewPost(context.Background(),req)
    if err != nil {
        log.Fatalf("Error calling greet server: %v",err)
    }
    log.Printf("Response from Greet: %v",res.Id)
}

** 我注意到此错误与您使用的是 Unary 还是 Streaming 无关。

解决方法

无论如何,我认为您发送了错误的代码段,正如错误所说:“传输正在关闭”您的连接已关闭,您必须在服务器中找到退出服务器的位置并进行处理。

,

我发现在服务器代码中我在返回响应之前有这样的代码:

log.Fatalf("Error happend: %v",e)

我像这样改变了我的代码:

if e != nil {
    log.Fatalf("Error happend: %v",e)
}

该错误尚未发生,但 log.Fatalf() 已损坏我的应用程序。

有关更多详细信息,这不是直接来自 grpc 部分的错误,而是因为我的应用程序在向 gRPC 客户端返回任何响应之前就崩溃了。