美文网首页
gRPC(二)golang gRPC样例

gRPC(二)golang gRPC样例

作者: hezhangjian | 来源:发表于2022-07-09 16:38 被阅读0次

本文代码地址

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)
}

相关文章

网友评论

      本文标题:gRPC(二)golang gRPC样例

      本文链接:https://www.haomeiwen.com/subject/ahcibrtx.html