简介
GRPC是一个谷歌开源的一个可跨语言rpc框架,主要面向移动应用开发且基于HTTP/2协议标准而设计,同时支持大多数流行的编程语言。
参考介绍:链接
实现(参考官网实现)
官网参考链接:链接
按照插件
F:\golang\project\src\go_code\grpc>go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28
F:\golang\project\src\go_code\grpc>go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2
go: downloading google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.2.0
go: downloading google.golang.org/grpc v1.2.1
F:\golang\project\src\go_code\grpc>go get google.golang.org/grpc
go: downloading google.golang.org/grpc v1.47.0
go: downloading google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013
go get: upgraded google.golang.org/grpc v1.46.0 => v1.47.0
F:\golang\project\src\go_code\grpc>cd pb
F:\golang\project\src\go_code\grpc\pb>.\build.bat
hello_grpc.proto
syntax = "proto3";
//这是个坑,记得写上这句话
//这个go_package写的是包名,要对应上
option go_package="./;hello_grpc";
package hello_grpc;
message Req {
string message = 1;
}
message Res {
string message = 1;
}
service HelloGRPC {
rpc SayHi(Req) returns (Res);
}
不加会报错:
build.bat(不要也可以,只是每次都需要输入这一大段。。。)
protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative ./hello_grpc.proto
client\main.go
package main
import (
"context"
"fmt"
hello_grpc "go_code/grpc/pb"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
)
func main() {
conn,e := grpc.Dial("localhost:8888",grpc.WithTransportCredentials(insecure.NewCredentials()))
fmt.Println(e)
defer conn.Close()
client := hello_grpc.NewHelloGRPCClient(conn)
req,_ := client.SayHi(context.Background(),&hello_grpc.Req{Message: "我从客户端来"})
fmt.Println(req.GetMessage())
}
server\main.go
package main
import (
"context"
"fmt"
hello_grpc "go_code/grpc/pb"
"google.golang.org/grpc"
"net"
)
type server struct {
hello_grpc.UnimplementedHelloGRPCServer
}
func (s *server) SayHi(ctx context.Context,req *hello_grpc.Req) (res *hello_grpc.Res,err error) {
fmt.Println(req.GetMessage())
return &hello_grpc.Res{Message: "我是从服务端返回的grpc内容"},nil
}
func main() {
l, _ := net.Listen("tcp",":8888")
s := grpc.NewServer()
hello_grpc.RegisterHelloGRPCServer(s,&server{})
s.Serve(l)
}
结果: