1.grpm 安装:

git clone https://github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org/grpc

2.proto, protoc-gen-go 安装:

go get -u github.com/golang/protobuf/{proto,protoc-gen-go}

3.protoc 安装:

git clone https://github.com/protocolbuffers/protobuf.git
cd $GOPATH/src/github.com/protocolbuffers/
./autogen.sh
./configure
make -j12
make install

4.go-genproto 安装(运行时需要的依赖,下载完移动到相应的目录里面)

git https://github.com/googleapis/go-genproto.git

5.protoc 查看版本:

[root@wangjq]# protoc --version
libprotoc 3.10.0

6.目录结构:

[root@wangjq demo]# tree
.
├── client
│   └── main.go
├── example
│   └── data.proto
└── server└── main.go3 directories, 4 files

7.data.proto 内容如下

syntax = "proto3"; //指定proto版本

package proto;//定义请求结构
message HelloRequest{string name=1;
}//定义响应结构
message HelloReply{string message=1;
}//定义Hello服务
service Hello{//定义服务中的方法
    rpc SayHello(HelloRequest) returns (HelloReply){}
}

8.生成 data.pb.go 文件

protoc -I . --go_out=plugins=grpc:. ./data.proto 

9.服务端代码

package mainimport (pb "demo/example""fmt""golang.org/x/net/context""google.golang.org/grpc""net"
)const (//gRPC服务地址Address = "127.0.0.1:50052"
)//定义一个helloServer并实现约定的接口
type helloService struct{}func (h helloService) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {resp := new(pb.HelloReply)resp.Message = "hello" + in.Name + "." return resp, nil
}var HelloServer = helloService{}func main() {listen, err := net.Listen("tcp", Address)if err != nil {fmt.Printf("failed to listen:%v", err)}//实现gRPC Servers := grpc.NewServer()//注册helloServer为客户端提供服务pb.RegisterHelloServer(s, HelloServer) //内部调用了s.RegisterServer()fmt.Println("Listen on" + Address)s.Serve(listen)
}

10.客户端代码

package mainimport (pb "demo/example""fmt""golang.org/x/net/context""google.golang.org/grpc"
)const (Address = "127.0.0.1:50052"
)func main() {//连接gRPC服务器conn, err := grpc.Dial(Address, grpc.WithInsecure())if err != nil {fmt.Println(err)}   defer conn.Close()//初始化客户端c := pb.NewHelloClient(conn)//调用方法reqBody := new(pb.HelloRequest)reqBody.Name = "gRPC"r, err := c.SayHello(context.Background(), reqBody)if err != nil {fmt.Println(err)}fmt.Println(r.Message)
}

11.运行测试

服务端运行:
[root@wangjq demo]# go run server/main.go
Listen on127.0.0.1:50052客户端运行:
[root@wangjq demo]# go run client/main.go
hellogRPC.

转载于:https://www.cnblogs.com/wangjq19920210/p/11572283.html

golang grpc demo相关推荐

  1. 【Golang | gRPC】gRPC-Client Streaming客户端流实战

    环境: Golang: go1.18.2 windows/amd64 grpc: v1.47.0 protobuf: v1.28.0 完整代码: https://github.com/WanshanT ...

  2. Golang gRPC 示例

    Golang gRPC 示例 1.安装gRPC runtime go get google.golang.org/grpc 为了自动生成Golang的gRPC代码,需要安装protocal buffe ...

  3. golang 并发demo 写入 redis

    原文链接:golang 并发demo 写入 redis 源代码: package mainimport ("fmt""runtime""strconv ...

  4. 【Golang | gRPC】使用protoc编译.proto文件

    环境: Golang: go1.18.2 windows/amd64 protoc:libprotoc 3.21.1 1. 安装protoc 使用protoc编译.proto文件,首先需要正确安装pr ...

  5. 运行cartographer的gRPC demo,附百度文件链接

    预先安装的库(主要是catographer和gRPC的基本依赖库) sudo apt-get install -y \cmake \g++ \git \google-mock \libboost-al ...

  6. Golang gRPC学习(04): Deadlines超时限制

    为什么要使用Deadlines# 当我们使用gRPC时,gRPC库关系的是连接,序列化,反序列化和超时执行.Deadlines 允许gRPC客户端设置自己等待多长时间来完成rpc操作,直到出现这个错误 ...

  7. Golang gRPC实践 连载六 内置Trace

    2019独角兽企业重金招聘Python工程师标准>>> 内置Trace grpc默认提供了客户端和服务端的trace日志,可惜没有提供自定义接口,当前只能查看基本的事件日志和请求日志 ...

  8. golang rpc demo

    RPC工作流程图 1.调用客户端句柄:执行传送参数 2.调用本地系统内核发送网络消息 3.消息传送到远程主机 4.服务器句柄得到消息并取得参数 5.执行远程过程 6.执行的过程将结果返回服务器句柄 7 ...

  9. mac golang grpc proto pb文件生成go文件.md

    文章目录 1.简介 2.操作步骤 1. 安装基础的protoc工具 1. 下载 2. 添加protoc到PATH 3. 安装golang的支持 4. 使用 1. 普通编译 2. import的路径 参 ...

最新文章

  1. 全民K歌内容挖掘与召回
  2. python pyOpenGL安装
  3. GeoServer简介、下载、配置启动、发布shapefile全流程(图文实践)
  4. 【论文解读】基于图卷积的价格感知推荐
  5. 认识本质:黑天鹅、关键时刻与张小龙的产品观
  6. NumPy入门攻略:手把手带你玩转这款强大的数据分析和计算工具
  7. 鼎微方案导航一体机刷机包_SMB方案之星 | 海康威视人脸门禁一体机产品应用方案集锦...
  8. eclipse安装M2Eclipse插件
  9. npoi excel导入html数据库,C#_.NetFramework_Web项目_NPOI_EXCEL数据导入
  10. 关于ESAPI获取资源文件问题
  11. 三菱PLC与威伦触摸屏通过OPC通信连接在线模拟仿真
  12. wifi信道12为啥没人用_关于WIFI信道的问题?
  13. channel代码示例
  14. 【letex编辑输出】pdf文件嵌入字体embedded fonts的问题
  15. (附源码)Python二手电脑商城 毕业设计 251713
  16. 初识结构体之座机电话号码
  17. 宏基因组分析步骤Linux,宏基因组--简单流程(代码)
  18. 数据结构笔记(6)二叉树的实现
  19. MATLAB 渐进式形态学滤波
  20. 程序员同事表演加班一个月后,我离职了

热门文章

  1. linux中vi大括号enter缩进,格式 – 如何在vi中对齐代码(大括号,括号等)?
  2. 中国语言文学专业c刊排行榜,中国有名的文学刊物有哪些 十大中国著名文学刊物盘点...
  3. windows消息机制和Linux,Windows消息机制初谈 (转)
  4. matlab过滤,matlab过滤问题
  5. 图标出问题_同是Office365,为什么你的软件图标还是旧版的?
  6. python函数大全和意思_python 之 内置函数大全
  7. 查看约束信息_【华智产品汇】育种信息安全的守护者——华智育种管家
  8. matlab 二值化_撸了一份 ostu二值化,需要的小伙伴请拿走
  9. grep 显示前后几行
  10. 【Thymeleaf】格式化数字