gRPC(二)golang gRPC样例
2022-07-09 本文已影响0人
hezhangjian
本文代码地址
https://gitee.com/shoothzj/grpc-examples
go语言实现gRPC客户端服务端
添加golang package定义
option go_package = "go_grpc_examples/echo";
安装依赖
go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2
go get google.golang.org/grpc
生成golang代码
protoc --go_out=echo --go_opt=paths=source_relative --go-grpc_out=echo --go-grpc_opt=paths=source_relative --proto_path=.. ../message_proto2.proto
server侧代码
package main
import (
"context"
"go_grpc_examples/echo"
"google.golang.org/grpc"
"log"
"net"
)
type server struct {
echo.UnimplementedEchoProto2ServiceServer
}
func (s *server) EchoProto2(ctx context.Context, req *echo.EchoProto2Req) (*echo.EchoProto2Resp, error) {
return &echo.EchoProto2Resp{
StrReq: req.StrReq,
StrOpt: req.StrOpt,
StrRep: req.StrRep,
Int64Req: req.Int64Req,
Int32Opt: req.Int32Opt,
Comic: req.Comic,
}, nil
}
func main() {
listen, err := net.Listen("tcp", ":10240")
if err != nil {
panic(err)
}
s := grpc.NewServer()
echo.RegisterEchoProto2ServiceServer(s, &server{})
log.Printf("server listening at %v", listen.Addr())
if err := s.Serve(listen); err != nil {
log.Fatalf("failed to serve: %v", err)
}
}
客户端代码
package main
import (
"context"
"go_grpc_examples/echo"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
"log"
"time"
)
func main() {
conn, err := grpc.Dial("localhost:10240", grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
panic(err)
}
defer conn.Close()
c := echo.NewEchoProto2ServiceClient(conn)
// Contact the server and print out its response.
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
var strReq = "strReq"
var strOpt = "strOpt"
var int64Req = int64(64)
var int32Opt = int32(32)
comic := echo.Comic_Bleach
r, err := c.EchoProto2(ctx, &echo.EchoProto2Req{
StrReq: &strReq,
StrOpt: &strOpt,
StrRep: []string{"str", "req"},
Int64Req: &int64Req,
Int32Opt: &int32Opt,
Comic: &comic,
})
if err != nil {
log.Fatalf("could not greet: %v", err)
}
log.Printf("Greeting: %s", r)
}