为什么使用grpc

1.protocl buffer一种高效的序列化结构。
2.支持http 2.0标准化协议。

http/2

1.http/2对每个源只需创建一个持久连接,在这一个连接内,可以并行的处理多个请求和响应,而且做到不相互影响。
2.允许客户端和服务端实现自己的数据流和连接流控制,这对我们传输大数据非常有帮助。

安装 grpc 与 protobuf 解释器

这里我们需要使用 protobuf 解释器 将 protobuf 语法的代码转化成对应语言的代码,以及使用 grpc 实现跨越性,所以我们需要先安装它们。
本教程中只会用到 python3 以及 golang ,所以我们只安装这两个语言的解释器就足够了

python3 安装 grpc 与 protobuf

安装 grpc 库

pip3 install grpcio

安装 grpc 工具 以及 protobuf 解释器

pip3 install grpcio-tools googleapis-common-protos

go 安装 grcp 与 protobuf

安装 grpc 库:

go get -u -v google.golang.org/grpc

然后从 https://github.com/protocolbuffers/protobuf/releases 下载 与你操作系统对应的 protobuf 解释器,这里选择的 linux64 进行下载
首先新建一个目录用来容纳下载安装包解压后的文件,并进入目录

mkdir protobuf && cd protobuf

下载 protobuf 解释器

wget https://github.com/protocolbuffers/protobuf/releases/download/v3.6.1/protoc-3.6.1-linux-x86_64.zip

解压缩下载的文件

unzip protoc*.zip

删除刚才下载好的压缩包

rm protoc*.zip

移动 protobuf 目录到 ~/.local

mv ~/protobuf/ ~/.local/

将 protobuf 的可执行文件添加进系统变量

echo "PATH=\"\$HOME/.local/protobuf/bin:\$PATH\"" >> ~/.profile

安装 protobuf go 语言的插件

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

将插件添加进系统变量

echo "PATH=\$PATH:\$GOPATH/bin" >> ~/.profile

然后使用 cd 命令回到用户根目录

cd

使用 grpc

创建本次使用的工程目录

创建工程目录并进入目录

mkdir $GOPATH/src/demo && cd $GOPATH/src/demo

编写 proto 文件

proto 文件为 protobuf 的扩展名,我们编写这个文件用于生成 python 与 go 都支持的代码。
这里我们再新建一个目录用来容纳 proto 文件以及 使用 protobuf 编译器转化过的代码
创建目录并进入目录

mkdir hello && cd hello

接下来开始编写 proto 文件,这里我们新建一个 名为 hello.proto 的文件并在里面写入以下内容

syntax = "proto3"; //指定语法为 protobuf3 语法,如果不写这句的话默认语法为 protobuf2
package hello; //指定包名,这句在本次演示中只对 go 生效,python 的 protobuf 解释器会忽略它service Greeter { // 定义grpc 远程调用的方法rpc SayHello (HelloRequest) returns (HelloReply) {} // 接受 HelloRequest 返回 HelloReply,SayHello 需要自己在服务端实现
}message HelloRequest { //定义一个消息类型string name = 1; //定义 name 字段为 string 类型 tag 为 1
}message HelloReply {string message = 1;
}

完成后保存并退出编辑

生成对应语言的代码

编辑好 proto 文件后我们并不能直接使用它,还需要将它转化成对应语言的代码才能使用
生成 go 语言的代码

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

生成 python 的代码

python3 -m grpc_tools.protoc -I . --python_out=. --grpc_python_out=. hello.proto

然后我们回到 demo 工程目录,开始真正的 代码编写

cd ..

编写服务端

服务端端这里我采用的 go 语言进行编写
创建一个名为 server.go 的文件并写入以下内容

package mainimport ("context""google.golang.org/grpc""google.golang.org/grpc/reflection""log""demo/hello""net"
)const (port = ":50051" // 监听端口
)type server struct{}func (s *server) SayHello(ctx context.Context, in *hello.HelloRequest) (*hello.HelloReply, error) { // 服务端实现 proto 中定义的方法return &hello.HelloReply{Message: "Hello " + in.Name}, nil //拼接客户端发送过来的消息,并返回给客户端
}func main() {lis, err := net.Listen("tcp", port) // 启动监听if err != nil {log.Fatalf("failed to listen: %v", err)        }s := grpc.NewServer()hello.RegisterGreeterServer(s, &server{})reflection.Register(s) // 在 grpc 上注册服务if err := s.Serve(lis); err != nil { //启动服务并处理错误log.Fatalf("failed to server: %v", err)        }
}

编写 客户端

客户端我采用的 python3 进行编写
创建一个名为 client.py 的文件写入以下内容

#! /usr/bin/env python3
# -*- coding: utf-8 -*-import grpc # 导入 grpc 模块import sys
sys.path.append('hello') # 将 hello 目录临时添加进环境变量,不然接下来的导入会失败import hello_pb2 #导入我们刚才从 helloWorld.proto 生成的 python 代码
import hello_pb2_grpcdef run():with grpc.insecure_channel('localhost:50051') as channel: # 创建连接到服务端的通道stub = hello_pb2_grpc.GreeterStub(channel) #创建提供调用的存根response = stub.SayHello(hello_pb2.HelloRequest(name = 'niconiconi')) #调用 SayHello 方法 发送我们刚才在 proto 文件中定义的字段,返回我们在 proto 中定义的返回值print("Greeter client received: " + response.message) #打印返回值if __name__ == '__main__':run()

运行 grpc 服务端与客户端

首先我们启动服务端

go run server.go

使用 CTRL + z 将 正在运行的服务端挂起在后台,然后使用 bg命令使挂起的 程序继续运行。
接下来运行我们编写的客户端

python3 client.py

不出意外的话你的屏幕上应该会打印

Greeter client received: Hello niconiconi

到这里 演示就全部结束了。

转载于:https://www.cnblogs.com/Paul-watermelon/p/11338019.html

gRPC快速入门记录相关推荐

  1. gRPC快速入门(三)——Protobuf应用示例

    gRPC快速入门(三)--Protobuf应用示例 一.Protobuf使用流程 在工程开发中使用Protobuf流程如下: (1)定义proto描述文件,以proto作为后缀名. (2)使用Prot ...

  2. Cordova 快速入门记录

    本篇文章由:http://xinpure.com/cordova-quick-start-recording/ 记一笔 Cordova 官网入门文档 Get Started Fast,言简意该.通俗易 ...

  3. pythongoogle.probuf.timestamp_gRPC快速入门(一)——Protobuf简介

    gRPC快速入门(一)--Protobuf简介 一.Protobuf简介 1.Protobuf简介 Protobuf即Protocol Buffers,是Google公司开发的一种跨语言和平台的序列化 ...

  4. JavaScript学习记录01快速入门、基本语法、严格检查模式

    文章目录 JavaScript学习记录01快速入门.基本语法.严格检查模式 1.1什么是JavaScript 1.2认识JavaScript框架 1.3快速入门 1.4基本语法入门 1.5数据类型简介 ...

  5. micro-app-vue2 vue3 超详细快速入门指南 学习记录

    micro-app-vue 快速入门指南 简介 micro-app是京东零售推出的一款微前端框架,它基于类WebComponent进行渲染,从组件化的思维实现微前端,旨在降低上手难度.提升工作效率.它 ...

  6. 学习记录《Simulink 快速入门 —— 官方Help文档》

    Simulink 快速入门 -- 官方Help文档 1. Simulink 模块图 2 创建简单模型 2.1 打开新模型 2.2 打开 Simulink库浏览器 2.2.1将模块添加到模型 2.2.2 ...

  7. 教你从0到1搭建秒杀系统-Canal快速入门(番外篇)

    Canal用途很广,并且上手非常简单,小伙伴们在平时完成公司的需求时,很有可能会用到.本篇介绍一下数据库中间件Canal的使用. 很多时候为了缩短调用延时,我们会对部分接口数据加入了缓存.一旦这些数据 ...

  8. matlab 写入 MYSQL_阿里开源MySQL中间件Canal快速入门

    前言 距离上一篇文章发布又过去了两周,这次先填掉上一篇秒杀系统文章结尾处开的坑,介绍一下数据库中间件Canal的使用. 「Canal用途很广,并且上手非常简单,小伙伴们在平时完成公司的需求时,很有可能 ...

  9. OpenStack快速入门

    OpenStack云计算快速入门(1) 该教程基于Ubuntu12.04版,它将帮助读者建立起一份OpenStack最小化安装.我是五岳之巅,翻译中多采用意译法,所以个别词与原版有出入,请大家谅解.我 ...

最新文章

  1. lasTools laszip.exe 点云las/laz的无损压缩/解压缩工具
  2. AI当红娘,真的能帮你摆脱单身吗?
  3. 一种三维结构化导航的思路
  4. nexus5 刷原装android,nexus5 刷回原生系统
  5. Fiddler之Autoresponder替换(Web)
  6. oracle 联表求和不重复_别再瞎忙了,Excel多表格求和用这4个方法分分钟完成的事...
  7. python批量执行linux命令并写入log日志
  8. hdu 6035:Colorful Tree (2017 多校第一场 1003) 【树形dp】
  9. 洛谷P1120小木棒 爆搜+剪枝
  10. Gnome即将满18岁,适用于Docker,Kali Linux 2.0的新工具以及更多新闻
  11. 把url地址复制到粘贴板上_写个简单的python爬虫爬取堆糖上漂亮的小姐姐
  12. [译] Facebook杯2013年编程挑战赛——预选赛题目及答案
  13. python-rrdtool python-pyrrd
  14. MT6762/MT6763处理器参数比较,MT6762参考设计资料介绍
  15. python编写移位密码实现加密与解密
  16. 图片太大,怎么压缩图片大小?
  17. visual studio工程文件介绍
  18. 51单片机八位数码管1到F动态滚动显示仿真及程序
  19. 什么是庖丁解牛的思维?
  20. 为什么要上机械制造业ERP系统?对企业有什么帮助?

热门文章

  1. luogu P3244 [HNOI2015]落忆枫音
  2. 15 并发编程-(IO模型)
  3. 记自己在spring中使用redis遇到的两个坑
  4. 山东理工大学第七届ACM校赛-G 飞花的传送门
  5. spring管理的类如何调用非spring管理的类
  6. 使用charles 抓取手机上的操作
  7. 加密算法—MD5、RSA、DES
  8. (二)单元测试利器 JUnit 4
  9. 怎么查询局域网内全部电脑IP和mac地址..
  10. 工程师、产品经理、数据工程师是如何一起工作的?