Go+Python双语言混合开发 第三部分 Go开发学习 第4章 grpc入门 学习笔记
第4章 grpc入门
4.1 什么是grpc和protobuf
grpc
gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# 支持.
protobuf
java中的dubbo dubbo/rmi/hessian messagepack 如果你懂了协议完全有能力自己去实现一个协议
- 习惯用
Json、XML
数据存储格式的你们,相信大多都没听过Protocol Buffer
-
Protocol Buffer
其实 是Google
出品的一种轻量 & 高效的结构化数据存储格式,性能比Json、XML
真的强!太!多! - protobuf经历了protobuf2和protobuf3,pb3比pb2简化了很多,目前主流的版本是pb3
4.2 python下protobuf体验
1. 安装
python -m pip install grpcio #安装grpc
python -m pip install grpcio-tools #安装grpc tools
2. 先体验protobuf3
protobuf3 是有自己专门的定义格式的 - 门槛
syntax = "proto3";
message HelloRequest {
string name = 1;
}
3. 生成proto的python文件
python -m grpc_tools.protoc --python_out=. --grpc_python_out=. -I. helloworld.proto
4. 查看protobuf生成的代码
from grpc_test import helloworld_pb2
request = helloworld_pb2.HelloRequest()
request.name = "bobby"
req_str = request.SerializeToString()
print(req_str)
request2 = helloworld_pb2.HelloRequest()
request2.ParseFromString(req_str)
print(request2.name)
5. 对比一下protobuf生成的效果
from grpc_test import helloworld_pb2
request = helloworld_pb2.HelloRequest()
request.name = "bobby"
req_str = request.SerializeToString()
print(req_str)
import json
req_json = {
"name":"bobby"
}
print(len(json.dumps(req_json)))
print(len(req_str))
4.3 python下的grpc开发体验
1. 官方案例
2. 运行
python greeter_server.py #运行服务器端
python greeter_client.py #运行客户端
4.4 python下解决grpc import路径出错的bug
https://github.com/protocolbuffers/protobuf/issues/1491
4.5 go下grpc开发体验
1. 下载工具
如果觉得下载较慢可以点击这里下载: