我正在试验 Protobuf 和 gRPC,并且正在学习 Go 基础教程:https ://www.grpc.io/docs/languages/go/basics/
从我在有关 ClientConn 的文档中看到的内容来看,同时使用相同的ClientConn似乎是安全的。但是我对创建的存根/客户端一无所知......
假设我通过 HTTP POST 请求接收数据,我想通过 gRPC 作为 protobuf 转发该数据,然后响应 HTTP 请求。我应该在每次处理 HTTP 请求时都创建一个客户端/存根,还是可以在设置 HTTP 服务器时创建客户端/存根并在设置 HTTP 处理程序时传入客户端/存根?
示例:我认为这没问题
var opts []grpc.DialOption
conn, err := grpc.Dial("127.0.0.1:1234", opts...)
if err != nil {
log.Panic(err)
}
defer conn.Close()
grpcService := service.Service{GRPC: conn}
http.HandleFunc("/", util.ValidateRequest(grpcService.HandleRoot))
// listen to port
http.ListenAndServe(fmt.Sprintf("%s:%d", viper.GetString("server.address"), viper.GetInt32("server.port")), nil)
但是这个呢
var opts []grpc.DialOption
conn, err := grpc.Dial("127.0.0.1:1234", opts...)
if err != nil {
log.Panic(err)
}
defer conn.Close()
client := pb.NewEventShipperClient(conn)
grpcService := service.Service{GRPC: conn, Client: client}
http.HandleFunc("/", util.ValidateRequest(grpcService.HandleRoot))
// listen to port
http.ListenAndServe(fmt.Sprintf("%s:%d", viper.GetString("server.address"), viper.GetInt32("server.port")), nil)
慕尼黑的夜晚无繁华
相关分类