问题描述
我有一个 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 客户端返回任何响应之前就崩溃了。