python golang中grpc 使用示例代码详解


Posted in Python onJune 03, 2020

python

1、使用前准备,安装这三个库

pip install grpcio
pip install protobuf
pip install grpcio_tools

2、建立一个proto文件hello.proto

// [python quickstart](https://grpc.io/docs/quickstart/python.html#run-a-grpc-application)
// python -m grpc_tools.protoc --python_out=. --grpc_python_out=. -I. hello.proto

// helloworld.proto
syntax = "proto3";
package test;

service Greeter {
 rpc SayHello(HelloRequest) returns (HelloReply) {}
 rpc SayHelloAgain(HelloRequest) returns (HelloReply) {}

}
service Greetera{
 rpc SayStudent(Studentid) returns (Student){}
}
message Student {
 string msg=1;//json
}


message Studentid{
 string id=1;
}
message HelloRequest {
 string name = 1;
}

message HelloReply {
 string message = 1;
}

3、执行命令就会对应生成两个py文件

hello_pb2.py

hello_pb2_grpc.py

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

4、py服务端代码hello.server.py:

from concurrent import futures
import time
import grpc
import hello_pb2
import hello_pb2_grpc
import json
# 实现 proto 文件中定义的 GreeterServicer
class Greeter(hello_pb2_grpc.GreeterServicer):
 # 实现 proto 文件中定义的 rpc 调用
 def SayHello(self, request, context):
 return hello_pb2.HelloReply(message = 'hello {msg}'.format(msg = request.name))
 def SayHelloAgain(self, request, context):
 return hello_pb2.HelloReply(message='hello {msg}'.format(msg = request.name))

class Gretera(hello_pb2_grpc.GreeteraServicer):
 def SayStudent(self,request,context):
 print(request.id)
 if request.id=="0":
 c=hello_pb2.Student(msg=json.dumps({"name":"owen","age":22,"sex":"男"}))
 else:
 c=hello_pb2.Student(msg=json.dumps({"name":"lihui","age":23,"sex":"女"}))
 return c
def serve():
 # 启动 rpc 服务
 server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
 hello_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)
 hello_pb2_grpc.add_GreeteraServicer_to_server(Gretera(),server)
 server.add_insecure_port('[::]:50052')
 server.start()
 try:
 while True:
 time.sleep(60*60*24) # one day in seconds
 except KeyboardInterrupt:
 server.stop(0)
if __name__ == '__main__':
 serve()

py客户端代码hello.client.py:

import grpc
import hello_pb2
import hello_pb2_grpc
import json
def run():
 # 连接 rpc 服务器
 channel = grpc.insecure_channel('localhost:50051')
 # 调用 rpc 服务
 stub = hello_pb2_grpc.GreeterStub(channel)
 response = stub.SayHello(hello_pb2.HelloRequest(name='czl'))
 print("Greeter client received: " + response.message)
 response = stub.SayHelloAgain(hello_pb2.HelloRequest(name='nsdnfkjda'))
 print("Greeter client received: " + response.message)
 stub1 = hello_pb2_grpc.GreeteraStub(channel)
 response1 = stub1.SayStudent(hello_pb2.Studentid(id='1'))
 print(json.loads(response1.msg))
if __name__ == '__main__':
 run()

golang

由于grpc是跨语言的所以这里用golang做为示范,golang客户端代码,小编这里也踩了许多坑,最主要的是两个proto文件一定要一致,golang 中使用必须安装protoc,windows将环境变量指向安装目录的bin下面:

1、protocal buffer安装

从 https://github.com/google/protobuf/releases  下载 对应自己的系统(环境变量记得改)

2、安装 golang protobuf

go get -u github.com/golang/protobuf/proto // golang protobuf 库
go get -u github.com/golang/protobuf/protoc-gen-go //protoc --go_out 工具

3、安装 gRPC-go

go get google.golang.org/grpc

4、生成go文件

protoc --go_out=plugins=grpc:文件目录 对应的.proto文件
protoc --go_out=plugins=grpc:. hello.proto

生成hello.pb.go,调用的实现hello_go_client.go:

package main
import (
 "context"
 "encoding/json"
 "google.golang.org/grpc"
 "log"
 "student/test" //对应的生成文件目录
)
type Studenmsg struct {
 Name string
 Age int
 Sex string
}
func main() {
 // 建立连接到gRPC服务
 conn, err := grpc.Dial("127.0.0.1:50052", grpc.WithInsecure())
 if err != nil {
 log.Fatalf("did not connect: %v", err)
 }
 // 函数结束时关闭连接
 defer conn.Close()
 // 创建Waiter服务的客户端
 t := test.NewGreeteraClient(conn)
 tr,err:=t.SayStudent(context.Background(),&test.Studentid{Id:"1"})
 if err != nil {
 log.Fatalf("could not greet: %v", err)
 }
 var st Studenmsg
 err=json.Unmarshal([]byte(tr.Msg),&st)//这里说明一下发过来的数据是json格式转化成struct
 if err!=nil{
 log.Println(err.Error())
 }
 log.Println(st.Name,st.Age,st.Sex)
}

总结

到此这篇关于python golang中grpc 使用示例代码详解的文章就介绍到这了,更多相关python golang grpc 使用内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python 字典(Dictionary)操作详解
Mar 11 Python
Python获取Windows或Linux主机名称通用函数分享
Nov 22 Python
python对html代码进行escape编码的方法
May 04 Python
浅析AST抽象语法树及Python代码实现
Jun 06 Python
python递归删除指定目录及其所有内容的方法
Jan 13 Python
Python解惑之整数比较详解
Apr 24 Python
Python实现求两个csv文件交集的方法
Sep 06 Python
Python WXPY实现微信监控报警功能的代码
Oct 20 Python
Python内置random模块生成随机数的方法
May 31 Python
python运用sklearn实现KNN分类算法
Oct 16 Python
用python介绍4种常用的单链表翻转的方法小结
Feb 24 Python
django 取消csrf限制的实例
Mar 13 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
Jun 03 #Python
QML用PathView实现轮播图
Jun 03 #Python
Python基于smtplib协议实现发送邮件
Jun 03 #Python
Pytorch环境搭建与基本语法
Jun 03 #Python
如何学习Python time模块
Jun 03 #Python
使用openCV去除文字中乱入的线条实例
Jun 02 #Python
Python能做什么
Jun 02 #Python
You might like
PHP通用检测函数集合
2011/02/08 PHP
微信API接口大全
2015/04/15 PHP
WordPress后台中实现图片上传功能的实例讲解
2016/01/11 PHP
php图像验证码生成代码
2017/06/08 PHP
phpStudy配置多站点多域名和多端口的方法
2017/09/01 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
PHP编程一定要改掉的5个不良习惯
2020/09/18 PHP
一个无限级XML绑定跨框架菜单(For IE)
2007/01/27 Javascript
用jscript启动sqlserver
2007/06/21 Javascript
在js中单选框和复选框获取值的方式
2009/11/06 Javascript
JavaScript与Div对层定位和移动获得坐标的实现代码
2010/09/08 Javascript
Javascript继承(上)——对象构建介绍
2012/11/08 Javascript
jquery cookie的用法总结
2013/11/18 Javascript
Javascript连接多个数组不用concat来解决
2014/03/24 Javascript
jQuery老黄历完整实现方法
2015/01/16 Javascript
解决Window10系统下Node安装报错的问题分析
2016/12/13 Javascript
jQuery电话号码验证实例
2017/01/05 Javascript
angular 用拦截器统一处理http请求和响应的方法
2017/06/08 Javascript
微信通过页面(H5)直接打开本地app的解决方法
2017/09/09 Javascript
vue 实现锚点功能操作
2020/08/10 Javascript
js实现网页随机验证码
2020/10/19 Javascript
Python实现的检测web服务器健康状况的小程序
2014/09/17 Python
浅谈Python 中整型对象的存储问题
2016/05/16 Python
Django原生sql也能使用Paginator分页的示例代码
2017/11/15 Python
解决Python 中英文混输格式对齐的问题
2018/07/16 Python
Python 从一个文件中调用另一个文件的类方法
2019/01/10 Python
在pycharm下设置自己的个性模版方法
2019/07/15 Python
ellesse美国官方商店:意大利高级运动服品牌
2019/10/29 全球购物
致短跑运动员广播稿
2014/01/09 职场文书
关于期中考试的反思
2014/02/02 职场文书
运动会入场词60字
2014/02/15 职场文书
2014年小班元旦活动方案
2014/02/16 职场文书
党的群众路线教育实践活动教师自我剖析材料
2014/10/09 职场文书
公民授权委托书
2014/10/15 职场文书
银行文明优质服务培训心得体会
2016/01/09 职场文书
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
2021/04/27 Python