性能优化
连接复用
go
// 全局复用连接
var conn *grpc.ClientConn
func init() {
conn, _ = grpc.Dial("localhost:50051",
grpc.WithTransportCredentials(insecure.NewCredentials()),
grpc.WithBlock(),
)
}连接池配置
go
import "google.golang.org/grpc/keepalive"
kaParams := keepalive.ClientParameters{
Time: 10 * time.Second,
Timeout: 3 * time.Second,
PermitWithoutStream: true,
}
conn, _ := grpc.Dial("localhost:50051",
grpc.WithKeepaliveParams(kaParams),
)消息大小
go
// 设置最大消息大小
s := grpc.NewServer(
grpc.MaxRecvMsgSize(1024*1024*10), // 10MB
grpc.MaxSendMsgSize(1024*1024*10),
)压缩
go
import "google.golang.org/grpc/encoding/gzip"
// 客户端压缩
conn, _ := grpc.Dial("localhost:50051",
grpc.WithDefaultCallOptions(grpc.UseCompressor(gzip.Name)),
)
// 服务端解压
s := grpc.NewServer(grpc.RPCCompressor(gzip.NewCompressor))性能监控
go
import "google.golang.org/grpc/stats"
// 实现 stats.Handler
type statsHandler struct{}
func (h *statsHandler) TagRPC(ctx context.Context, info *stats.RPCTagInfo) context.Context {
return ctx
}
func (h *statsHandler) HandleRPC(ctx context.Context, rpcStats stats.RPCStats) {
// 记录指标
}