尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Go-RPC框架原理与gRPC高级实战

Go-RPC框架原理与gRPC高级实战 Go-RPC框架原理与gRPC高级实战文章导语Go标准库自带了net/rpc框架而gRPC则是Google开源的通用RPC框架。本文深入RPC原理和gRPC的Go实现覆盖protobuf、拦截器、流式通信等高级特性。一、Go标准RPCtypeArithstruct{}typeArgsstruct{A,Bint}func(a*Arith)Multiply(args*Args,reply*int)error{*replyargs.A*args.Breturnnil}// 服务端funcmain(){rpc.Register(new(Arith))rpc.HandleHTTP()http.ListenAndServe(:1234,nil)}// 客户端client,_:rpc.DialHTTP(tcp,localhost:1234)varreplyintclient.Call(Arith.Multiply,Args{7,8},reply)二、gRPC四大通信模式service Greeter { // 1. 一元RPC rpc SayHello(HelloRequest) returns (HelloReply); // 2. 服务端流式 rpc LotsOfReplies(HelloRequest) returns (stream HelloReply); // 3. 客户端流式 rpc LotsOfGreetings(stream HelloRequest) returns (HelloReply); // 4. 双向流式 rpc BidiHello(stream HelloRequest) returns (stream HelloReply); }三、拦截器链// 一元拦截器funcUnaryServerInterceptor(ctx context.Context,reqinterface{},info*grpc.UnaryServerInfo,handler grpc.UnaryHandler)(interface{},error){start:time.Now()resp,err:handler(ctx,req)log.Printf(RPC: %s took %v,info.FullMethod,time.Since(start))returnresp,err}// 注册grpc.NewServer(grpc.UnaryInterceptor(UnaryServerInterceptor),)四、全文总结protobuf定义服务契约跨语言支持四种通信模式覆盖从简单调用到双向流拦截器实现认证、日志等横切关注点连接池复用gRPC连接提升性能参考文献gRPC Go: https://github.com/grpc/grpc-goProtocol Buffers文档gRPC官方Go教程
返回列表