温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Golang中grpc怎么用

发布时间:2021-12-15 09:27:50 阅读:200 作者:小新 栏目:大数据
GO开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

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

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 mainimport (   "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 mainimport (   "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怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

原文链接:https://my.oschina.net/olongfen/blog/4467256

AI

开发者交流群×