GRPC的golang快速入门
GRPC的安装
grpc的官网grpc.io
go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.26
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1
执行完上面两条命令后,gopath的bin目录下会出现两个执行文件protoc-gen-go.exe和protoc-gen-go-grpc.exe
还需要安装proto.exe,安装地址https://github.com/protocolbuffers/protobuf/releases
下载相应系统的压缩包即可
将下载解压好的proto.exe也放在gopath的bin目录下
最后下载golang的grpc第三方库
go get -u google.golang.org/grpc
protobuf文件的编写
简单例子
//定义proto版本
syntax = "proto3";
//定义包名
package pb;
//定义生成的go文件的包名"路径;别名"
option go_package = "./pb";
//类似于go的结构体
message Req {
string message = 1;
}
message Res {
string message = 1;
}
//定义服务器
service SayHi{
//定义rpc服务
rpc Hello (Req) returns (Res);
}
编译命令
protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative ./hello.proto
即可生成相应的golang文件
server端
-
定义服务方法
-
监听端口
-
注册grpc服务
-
注册服务方法
-
开启服务
package main
import (
"context"
"log"
"net"
"new/grpc/pb"
"google.golang.org/grpc"
)
//定义一个服务结构体
type Server struct {
pb.UnimplementedSayHiServer
}
//定义服务方法
func (s *Server) Hello(c context.Context, in *pb.Req) (*pb.Res, error) {
log.Println(in.Message)
return &pb.Res{Message: "服务器发送的信息"}, nil
}
func main() {
//监听端口
listen, err := net.Listen("tcp", ":9999")
if err != nil {
log.Println(err)
return
}
//注册grpc服务
s := grpc.NewServer()
//注册服务方法
pb.RegisterSayHiServer(s, &Server{})
//开启grpc服务
s.Serve(listen)
}
client端
- 建立连接
- 定义相应方法的客户端
- 调用对应方法
package main
import (
"context"
"log"
"new/grpc/pb"
"google.golang.org/grpc"
)
func main() {
//建立连接
conn, err := grpc.Dial("127.0.0.1:9999", grpc.WithInsecure())
if err != nil {
log.Println(err)
return
}
defer conn.Close()
//定义相应方法的客户端
c := pb.NewSayHiClient(conn)
//调用相应方法
res, err := c.Hello(context.Background(), &pb.Req{Message: "客户端发送的信息"})
if err != nil {
log.Println(err)
return
}
log.Println(res)
}