grpc入门
grpc是google公司开发的远程调用协议rpc. 官网https://www.grpc.io/
必备条件
-
生成工具
- protoc
- apt 安装
- protoc
-
插件
- go语言插件(
go install
安装)- protoc-gen-go
- protoc-gen-go-grpc
- go语言插件(
步骤
-
定义proto文件
syntax = "proto3"; option go_package = "pb/"; package pb; service HelloService { rpc Hello(HelloRequest) returns (HelloReplay) {} } message HelloRequest { string name = 1; } message HelloReplay { string message = 1; }
-
服务端
- main.go
package main import ( "hello/pb" "net" "google.golang.org/grpc" ) func main() { lis, err := net.Listen("tcp4", ":9000") if err != nil { panic(err) } s := grpc.NewServer() pb.RegisterHelloServiceServer(s, &server{}) err = s.Serve(lis) if err != nil { panic(err) } }
- server.go
package main import ( "context" "hello/pb" ) type server struct { pb.UnimplementedHelloServiceServer } func (s *server) Hello(ctx context.Context, in *pb.HelloRequest) (out *pb.HelloReplay, err error) { out = &pb.HelloReplay{ Message: "Hello," + in.GetName(), } return }
-
客户端
- main.go
package main import ( "context" "log" "time" "google.golang.org/grpc" "hello/pb" ) func main() { conn, err := grpc.Dial("127.0.0.1:9000", grpc.WithInsecure()) if err != nil { panic(err) } defer conn.Close() c := pb.NewHelloServiceClient(conn) ctx, cancel := context.WithTimeout(context.Background(), time.Second) defer cancel() r, err := c.Hello(ctx, &pb.HelloRequest{Name: "桥三"}) if err != nil { panic(err) } log.Printf("还: %s", r.GetMessage()) }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
2019-06-14 UML入门
2019-06-14 时间管理GTD
2019-06-14 Linux下打开超大文件的方法
2017-06-14 Java 调用 C/C++ 之 JNA 系列实战篇 —— 输出char * (六)
2017-06-14 eclipse快捷键
2017-06-14 maven仓库镜像配置