Golang gRPC无法保持活动:客户端连接正在关闭

时间:2020-06-18 02:22:32

标签: go graphql grpc

嗨,我正在尝试将gRPC客户端连接到服务器,但是即使连接成功,从graphql解析器查询它时,也会收到以下错误。但是,如果我直接从解析器拨号,则一切正常,因此与客户端没有打开连接有关。

rpc错误:代码=已取消desc = grpc:客户端连接正在关闭

client.go

var kacp = keepalive.ClientParameters{
    Time:                10 * time.Second, // send pings every 10 seconds if there is no activity
    Timeout:             time.Second,      // wait 1 second for ping back
    PermitWithoutStream: true,             // send pings even without active streams
}

func gqlHandler() http.HandlerFunc {

    conn, err := grpc.Dial("127.0.0.1:50051", grpc.WithInsecure(), 
    grpc.WithKeepaliveParams(kacp),
    grpc.WithBlock())

    if err != nil {
        panic(err)
    }
    defer conn.Close()

    db := proto.NewPlatformDBClient(conn)

    gh := handler.GraphQL(platform.NewExecutableSchema(platform.Config{Resolvers: &platform.Resolver{
        DB: db,
    }}))

    gh = cors.Disable(gh)

    return gh
}

1 个答案:

答案 0 :(得分:1)

这是因为 defer conn.Close() 该命令将在使用连接之前执行。

From the go blog

defer语句将函数调用推送到列表上。的清单 周围的函数返回后,将执行保存的呼叫。

因此,您将删除defer conn.Close()行,并在不再使用该连接后将其关闭。