Day1 环境安装和配置
1.先去github上下载对应版本的protocol ,使用github镜像网站,避免FQ
网址:https://hub.yzuu.cf/protocolbuffers/protobuf/releases
下载好后,解压到相应目录,将bin文件的地址添加到环境变量的path中,最后在cmd中使用protoc测试。出现以下内容则安装成功

2.下载安装GRPC核心库
在项目中打开terminal,输入go get google.golang.org/grpc即可
配合各个语言的代码生成工具,对于Golang来说称为potoc-gen-go需要安装两个库:
go install google.golang/protobuf/cmd/protoc-gen-go@latest go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
GOBIN must be an absolute path 报错解决办法
使用go env 查看环境变量GOBIN到底是多少

将该路径改为GOPATH下面的bin路径即可

编写protobuf文件
1.新建proto文件,在文件中创建以 .proto结尾的文件
syntax = "proto3"; // 指定proto版本 package hello_grpc; // 指定默认包名 // 指定golang包名 option go_package = "/hello_grpc"; //定义rpc服务 service HelloService { // 定义函数 rpc SayHello (HelloRequest) returns (HelloResponse) {} } // HelloRequest 请求内容 message HelloRequest { string name = 1; string message = 2; } // HelloResponse 响应内容 message HelloResponse{ string name = 1; string message = 2; }
2.然后切换至proto文件的目录下执行命令
protoc --go_out=. hello.proto(文件名)
protoc --go-grpc_out=. hello.proto(文件名)
生成两个go文件

客户端
package main import ( pb "GRPC_study/server/protoc" "context" "fmt" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" "log" ) func main() { addr := ":8080" //使用grpc.Dial创建一个到指定地址的grpc连接 //此处使用不安全的证书来实现SSL//TLS连接 conn, err := grpc.Dial(addr, grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { log.Fatal(fmt.Sprintf("grpc connect addr [%s] 连接失败 %s", addr, err)) } defer conn.Close() //初始化客户端 client := pb.NewSayHelloClient(conn) //客户端调用方法 result, err := client.SayHello(context.Background(), &pb.HelloRequest{ Name: "张三", Message: "你好我是张三", }) fmt.Println(result) }
服务端
package main import ( "context" "fmt" "google.golang.org/grpc" "google.golang.org/grpc/grpclog" "net" ) import pb "GRPC_study/server/protoc" // HelloServer1 得有一个结构体,需要实现这个服务的全部方法,叫什么名字不重要 type HelloServer1 struct { pb.UnimplementedSayHelloServer } func (HelloServer1) SayHello(ctx context.Context, request *pb.HelloRequest) (pd *pb.HelloResponse, err error) { fmt.Println("入参:", request.Name, request.Message) pd = new(pb.HelloResponse) pd.Name = "你好" pd.Message = "我这边收到了" return } func main() { //监听端口 listen, err := net.Listen("tcp", ":8080") if err != nil { grpclog.Fatal("Failed to listen: ", err) } //创建一个grpc服务器实例 s := grpc.NewServer() server := HelloServer1{} //将server结构体注册为grpc服务 pb.RegisterSayHelloServer(s, &server) fmt.Println("grpc server running : 8080") //开始处理客户端请求 err = s.Serve(listen) }
浙公网安备 33010602011771号