嗨,我正在尝试将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
}
答案 0 :(得分:1)
这是因为
defer conn.Close()
该命令将在使用连接之前执行。
defer语句将函数调用推送到列表上。的清单 周围的函数返回后,将执行保存的呼叫。
因此,您将删除defer conn.Close()
行,并在不再使用该连接后将其关闭。