Golang中grpc怎么用

小编给大家分享一下Golang中grpc怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

成都创新互联-专业网站定制、快速模板网站建设、高性价比通城网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式通城网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖通城地区。费用合理售后完善,十多年实体公司更值得信赖。

1.  grpc安装

pip install --upgrade pip

pip install grpcio --user 

pip install protobuf --user

pip install grpcio-tools --user

sudo yum -y install protobuf-compiler protobuf-static protobuf protobuf-devel

dnf install protobuf-compiler.x86_64 

pip install googleapis-common-protos --user

2. 导入grpc包

go get -u google.golang.org/grpc
go get -u github.com/golang/protobuf/protoc-gen-go

3. 编写test.proto文件

// 指定版本

syntax = "proto3";

option objc_class_prefix = "HLW";
// 定义包名
package demo;

// 定义服务
service ServerBase{
  // 定义接口
  // 方法
  rpc MakeMD5(Request) returns (Response){}
  rpc SayHello(HelloRequest) returns (HelloReplay){}
}

//请求的结构体
message HelloRequest{
   // 类型 字段 = 标识号
    string name = 1;
}
//返回的结构体
message HelloReplay{
    string message = 1;
}

// 定义请求结构体
message Request{
  string Data = 1;
}

// 定义返回接口体数据
message Response{
  string Msg = 1;
}

4. 生成.go文件

protoc --go_out=plugins=grpc: . test.proto

这时候目录低下会自动生成test.pb.go文件

5. 简单的书写server.go

package main
import (
  "crypto/md5"
  "errors"
  "fmt"
  "github.com/srlemon/note/grpc_"
  "golang.org/x/net/context"
  "google.golang.org/grpc"
  "log"
  "net"
)

const (
  PORT = ":5003"
)

func main() {
  // 开启监听
  lis, err := net.Listen("tcp", PORT)
  if err != nil {
     log.Fatal(err)
  }
  // new
  s := grpc.NewServer()
  // 注册服务
  demo.RegisterServerBaseServer(s, &Serve{})
  log.Println("rpc服务已经开启")
  s.Serve(lis)
}

// Serve 服务端
type Serve struct {
}

// MakeMD5 方法
func (s *Serve) MakeMD5(ctx context.Context, req *demo.Request) (ret *demo.Response, err error) {
  if req == nil {
     err = errors.New("请求数据为空")
     return
  }
  md := md5.New()
  data := md.Sum([]byte(req.Data))
  ret = new(demo.Response)
  ret.Msg = fmt.Sprintf("%x", data)
  return
}

// SayHello 方法
func (s *Serve) SayHello(ctc context.Context, req *demo.HelloRequest) (ret *demo.HelloReplay, err error) {
  if req == nil {
     err = errors.New("请求数据为空")
     return
  }
  ret = new(demo.HelloReplay)
  ret.Message = req.Name
  return
}

    go run server.go  开启rpc服务

6. 写client.go文件

    

package main
import (
  "fmt"
  demo "github.com/srlemon/note/grpc_"
  "golang.org/x/net/context"
  "google.golang.org/grpc"
  "log"
)

const (
  addr = "127.0.0.1:5003"
)

func main() {
  ctx := context.Background()
  // 连接代理
  conn, err := grpc.Dial(addr, grpc.WithInsecure())
  if err != nil {
     log.Fatal("did no connect", err)
  }
  defer conn.Close()
  // 生成一个客户端
  client := demo.NewServerBaseClient(conn)
  var (
     data *demo.Request
     res  *demo.Response
  )
  data = new(demo.Request)
  data.Data = "哈哈,和黑"
  // 使用服务端方法
  if res, err = client.MakeMD5(ctx, data); err != nil {

     log.Fatal("sssssssssss", err)
  }
  // 输出进行加密后的信息
  fmt.Println(string(res.Msg))
  // 使用服务端方法
  _d, _ := client.SayHello(ctx, &demo.HelloRequest{Name: "哈哈哈"})
  // 输出要说的内容
  fmt.Println(_d.Message)
}

go run client.go

终端输出:

Golang中grpc怎么用

以上是“Golang中grpc怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


分享标题:Golang中grpc怎么用
网页网址:http://pwwzsj.com/article/ipsocc.html