1. 数据传输基本原理

2. grpc环境安装

  • 代码生成器
go get -u github.com/golang/protobuf/protoc-gen-go
// 会自动在 $GOPATH/bin 目录下生成 protoc-gen-go 可执行二进制文件
// 需要设置GOPATH环境变量,并且将 $GOPATH/bin 添加到系统或当前用户的环境变量PATH中
  • grpc框架
go get -u google.golang.org/grpc
  • Proto buffer 文件编译器
1. 下载地址: https://github.com/protocolbuffers/protobuf/releases
2. 下载编译器 protoc
3. 将编译器放在 $GOPATH/bin/目录下
4. 将$GOPATH/bin/目录添加到系统或当前用户环境变量 PATH 中
# protoc编译器会依据proto文件生成对应语言的代码

3. Demo

  • 编写 proto buffer文件
syntax = "proto3"; // 声明当前使用的是proto3语法

option go_package = "service/"; // option --选项,指明依据当前proto文件生成的go代码放到哪个包下

// 定义rpc消息结构 -- 请求
message ProductRequest {
int64 product_id = 1;
} // 定义rcp消息结构 -- 响应
message ProductResponse {
int64 product_store = 1; // 字段类型 字段名 字段值在二进制数据中的排序位置
}
  • 使用 protoc编译 proto文件,生成Go代码
protoc --go_out=service proto/hai.proto
// --go_out 指定生成go代码保存的目录位置,最后一个参数是proto文件
// 会生成一个 *.pb.go 文件
  1. grpc服务端与客户端
  • 定义 proto buffer文件
syntax = "proto3";

option go_package = "service/";

message ProductRequest {
int64 product_id = 1;
} message ProductResponse {
int64 product_store = 1;
} // 定义一个产品服务
service ProductService {
// GetProductStoreNums 获取商品库存
rpc GetProductStoreNums (ProductRequest) returns (ProductResponse);
}
  • Protoc 编译 proto文件
protoc --go_out=plugins=grpc:. .\proto\shop.proto
// 指定插件 plugins=grpc
// 冒号后面是生成Go代码的保存目录 // 生成代码之后,需执行 go mod tidy 安装依赖
  • 创建grpc服务端\
package main

import (
"context"
"fmt"
"google.golang.org/grpc"
"learn-go-project/service"
"log"
"net"
) // ImplementProductService 定义产品服务实现类
type ImplementProductService struct { } // GetProductStoreNums 实现 proto buffer文件中service 定义的rpc方法 ==> 实现 pb文件中 rpc方法生成的接口
func (s *ImplementProductService) GetProductStoreNums(ctx context.Context, in *service.ProductRequest) (*service.ProductResponse, error) {
fmt.Println(in.GetProductId())
return &service.ProductResponse{ProductStore: 20}, nil
} func main() {
// 1. 声明一个grpc服务
grpcService := grpc.NewServer() // 2. 将实现类注册到生成的pd文件中
service.RegisterProductServiceServer(grpcService, &ImplementProductService{}) // 3. 启动tcp服务
l, err := net.Listen("tcp", "0.0.0.0:9999")
if err != nil {
log.Fatalln(err)
} // 3. 让grp去处理tcp连接
err = grpcService.Serve(l)
if err != nil {
log.Fatalln(err)
}
}
  • 创建grpc客户端
package main

import (
"context"
"fmt"
"google.golang.org/grpc"
"learn-go-project/service"
"log"
) func main() {
// 1. 创建grpc客户端连接
conn, err := grpc.Dial(":9999", grpc.WithInsecure())
if err != nil {
log.Fatalln(err)
}
defer conn.Close() // 2. 创建对应服务的连接
cli := service.NewProductServiceClient(conn) // 3. 调用方法,获取响应体
response, err := cli.GetProductStoreNums(context.Background(), &service.ProductRequest{ProductId: 50})
if err != nil {
log.Fatalln(err)
} fmt.Println(response.ProductStore)
}

grpc-环境与示例的更多相关文章

  1. go的grpc环境源码编译安装

    go的grpc环境安装 参考grpc-go官方文档:https://grpc.io/docs/languages/go/quickstart/ 视频教程:https://www.bilibili.co ...

  2. go语言的grpc环境安装

    本文直接用安装包的方式安装. 源码编译安装参考:https://www.cnblogs.com/abc36725612/p/14288333.html 环境 golang的docker image d ...

  3. python的grpc环境安装

    环境 ubuntu:bionic的docker image docker run -it ubuntu:bionic python的grpc环境安装 参考grpc官网:https://grpc.io/ ...

  4. 沁恒CH32F103C8T6(二): Linux PlatformIO环境配置, 示例运行和烧录

    目录 沁恒CH32F103C8T6(一): Keil5环境配置,示例运行和烧录 沁恒CH32F103C8T6(二): Linux PlatformIO环境配置, 示例运行和烧录 StdPeriphLi ...

  5. Nginx宣布正式支持gRPC,附示例代码

    原创 2018-03-20 薛命灯 聊聊架构 作者|Owen Garrett编辑|薛命灯 NGINX 官方博客正式宣布 NGINX 支持原生的 gPRC,现在就可以从代码仓库拉取快照版本.该特性将会被 ...

  6. Hadoop-2.6.0 + Zookeeper-3.4.6 + HBase-0.98.9-hadoop2环境搭建示例

    1    基本信息 1.1     软件信息 hadoop-2.6.0 zookeeper-3.4.6 hbase-0.98.9-hadoop2 (以下示例中使用的操作系统是Centos 6.5,请将 ...

  7. C连接MySQL数据库开发之Linux环境完整示例演示(增、删、改、查)

    一.开发环境 ReadHat6.3 32位.mysql5.6.15.gcc4.4.6 二.编译 gcc -I/usr/include/mysql -L/usr/lib -lmysqlclient ma ...

  8. go 版本 gRPC 环境搭建(3.0正式版)

    之前装过 gRPC 的各个测试版本,有些残余的文件,正式版的安装和之前残留的清除整理如下:   安装 go 版本的 gRPC go 的安装略过.需要 go 1.5 以上版本. $ go version ...

  9. jenkins(一)集成环境搭建示例

    一.环境准备 1.安装java环境 测试自己机器是否已安装,在dos上运行java-version ,出现如下类似结果表示安装完成 2.安装Git/svn git具体配置见我的博客 “GitHub使用 ...

  10. SSH框架总结(帧分析+环境结构+示例源代码下载)

    首先,SSH不是一个框架.而是多个框架(struts+spring+hibernate)的集成,是眼下较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层Web应用程序. 集成SSH框 ...

随机推荐

  1. MinIO的简单使用

    MINIO介绍 什么是对象存储? 以阿里云OSS为例: 对象存储服务OSS(Object Storage Service)是一种海量.安全.低成本.高可靠的云存储服务,适合存放任意类型的文件.容量和处 ...

  2. C# 成为2023年度编程语言之王

    原文发表在公众号 腾讯云开发者:https://mp.weixin.qq.com/s/5owE5hmJVkwOLJrKMXfR6Q 导读 2023 TIOBE 年度编程语言正式揭晓,C# 在陪跑多年后 ...

  3. CSS之动画

    一.动画 动画类型 CSS3 可以创建动画,它可以取代许多网页动画图像.Flash 动画和 JavaScript 实现的效果. transform属性可以定义一些主要的动画属性, translate: ...

  4. C++篇:第十四章_编程_知识点大全

    C++篇为本人学C++时所做笔记(特别是疑难杂点),全是硬货,虽然看着枯燥但会让你收益颇丰,可用作学习C++的一大利器 十四.编程 (一)概念 系统函数及其库是 C++语言所必须的,预处理命令不是 C ...

  5. CWE发布2021年最危险的25种软件缺陷

    摘要:CWE最危险的25种软件缺陷,是NVD过去两年中遇到的最常见和影响最大的问题指示性的列表. CWE Top25 可以帮助开发人员.测试人员和用户,以及项目经理.安全研究人员和教育工作者深入了解最 ...

  6. 跟我学AI建模:分子动力学仿真模拟之DeepMD-kit框架

    摘要:分子动力学仿真模拟的重点就在于如何建立模型描述分子间的相互作用. 本文分享自华为云社区<AI建模-分子动力学仿真>,作者: 木子_007 . 一.背景 分子动力学的仿真模拟广泛应用于 ...

  7. Gartner 权威解读: SBOM 采用率将于2025年达到60%

    随着现代软件开发越来越依赖于第三方资源,针对软件供应链的恶意攻击数量也随之激增.据业内权威机构 Gartner 预计,软件物料清单 (SBOM) 的采用率在 2025 年将会达到 60%. Gartn ...

  8. 为提高 SDLC 安全,GitHub 发布新功能|GitHub Universe 2022

    GitHub Universe 2022于上周举办.在此次大会上,Github 公布了开源软件状态的最新报告,报告中的统计数据显示,90% 的公司都在使用开源,现在 GitHub 上有9400万用户, ...

  9. ByConity 社区回顾|ByConity 和开发者们一起展望未来,携手共进!

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 新年伊始,我们想在这里感谢一群 ByConity 社区的小伙伴们. 正是因为有社区的开发者的支持,截止到 2023 ...

  10. Solon Web 开发,十、签权

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...