grpc 是rpc的一类。
grpc官网 : http://www.grpc.io/docs/tutorials/basic/python.html
序列化使用的是:https://developers.google.com/protocol-buffers/
cs模式,stub校验
四种模式,其实也就两种大模式有stream,没stream的;使用stream只不过是为了减少系统的开销
以下例子是python版,其它版体是大同小异
使用步聚:
1)定义IDL
syntax = "proto3"; package hello; service Greeter { rpc SayHello (HelloRequest) returns (stream HelloReply) {} } service ConnMysql { rpc ConnectMysql (MyqlRequest) returns (MysqlResponse) {} } message HelloRequest { string message = 1; int64 age = 2; } message HelloReply { string message = 1; int64 age = 2; } message MyqlRequest { string dbname = 1; } //连接mysql,响应返回值 message MysqlResponse { repeated string selectlist = 1; }
生成接口代码:
python -m grpc.tools.protoc -I=. --python_out=/Users/admin/devops/logCenter/logops/grpc/ --grpc_python_out=/Users/admin/devops/logCenter/logops/grpc/ proto/log.proto
生成的是一个log_pb2.py
2)写server端代码
# coding:utf-8 import log_pb2 from concurrent import futures import grpc import time _ONE_DAY_IN_SECONDS = 60 * 60 * 24 import MySQLdb class Greeter(log_pb2.GreeterServicer): def SayHello(self, request, context): try: conn = MySQLdb.connect( host='127.0.0.1', port=3306, user='root', passwd='hugo', db='jiraconnector' ) cur = conn.cursor() sqli = "insert into api_taskid (task_id,task_name,task_env,create_time) VALUES (%s,%s,%s,%s)" cur.execute(sqli, (request.message, request.age, '4', '2016-06-20 06:54:28.488573')) cur.close() conn.commit() conn.close() print request.message print request.age yield log_pb2.HelloReply(message='hello hugo', age=10) except Exception as e: print e class ConnMysql(log_pb2.ConnMysqlServicer): def ConnectMysql(self, request, context): print request.dbname return log_pb2.MysqlResponse(selectlist='1') def server(): server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) log_pb2.add_GreeterServicer_to_server(Greeter(), server) log_pb2.add_ConnMysqlServicer_to_server(ConnMysql(), server) server.add_insecure_port('127.0.0.1:15000') server.start() try: while True: time.sleep(_ONE_DAY_IN_SECONDS) except KeyboardInterrupt: server.stop(0) if __name__ == '__main__': server()
3)写client端
# coding:utf-8 import grpc import log_pb2 _TIMEOUT_SECONDS = 10 def run(): try: # with log_pb2.beta_create_Greeter_stub(,'127.0.0.1',15000) as stub : # response = stub.SayHello(log_pb2.HelloRequest(message='hello hugo',name='18'),_TIMEOUT_SECONDS) # print response channel = grpc.insecure_channel('127.0.0.1:15000') stub = log_pb2.GreeterStub(channel) response = stub.SayHello(log_pb2.HelloRequest(message='hugo000000', age=19), _TIMEOUT_SECONDS) conn_mysql_stub = log_pb2.ConnMysqlStub(channel) res = conn_mysql_stub.ConnectMysql(log_pb2.MyqlRequest(dbname='jiraconnector'), _TIMEOUT_SECONDS) print res print response.next() except Exception as e: print e if __name__ == '__main__': run()
4)结果
selectlist: "1"
message: "hello hugo"
age: 10
总结:简单易用,文档规范。
常见错误
<!--?xml version="1.0" encoding="UTF-8" standalone="no"?-->
reference :
http://maqiangthunder.github.io/2016/07/04/%E6%9D%82/gRPC/
https://github.com/geekan/grpc-python-demos/blob/master/helloworld/client.py
http://guojing.me/posts/grpc-python-bind-source-code-1/
相关推荐
基于DotNetCore的gRPC 通信示例代码,有了 gRPC, 我们可以一次性的在一个 .proto 文件中定义服务并使用任何支持它的语言去实现客户端和服务器,反过来,它们可以在各种环境中,从Google的服务器到你自己的平板电脑-...
grpc c++示例代码,vs2017编译,可运行,供学习参考使用
grpc-java示例代码;grpc-java示例代码;grpc-java示例代码;grpc-java示例代码;v;grpc-java示例代码grpc-java示例代码;grpc-java示例代码
gRPC Java教程 此存储库包含发布在上的gRPC Java示例的源代码。 如有疑问或评论,请在各自的博客文章中发表评论或打开GitHub问题。 谢谢!
《c#:grpc初体验》实例代码:https://blog.csdn.net/u010476739/article/details/109479325
提供了一个完整的gRpc在C#中的使用的示例项目(可直接运行),包含了服务端和客户端远程调用及proto接口定义代码。
Spring Boot微服务集成gRPC通讯完整示例, idea工程导入, 直接运行
B站微服务框架Kratos详细教程(5)-gRPC 示例项目源码 博文地址:https://blog.csdn.net/uisoul/article/details/108490259
gRPC Java示例这是Java gRPC示例的集合。 这不是Google的官方产品。
ASP.NET Core 5.0中的gRPC服务示例(正在进行中) 先决条件 创建一个数据库,别忘了在您的连接字符串和sql文件中调整它的名称 使用Sql文件创建表: : 用Sql文件向表格提供数据: : 如果您不设置数据库,则默认...
一个展示如何在 NodeJS 中使用 GRPC 的示例 请阅读以充分利用此 repo 将代码克隆到本地 使用以下命令将代码克隆到本地,我遵循 git clone https://github.com/huuhao1999/GRPC-protocol-buffers-nodeJS.git 安装 ...
gRPC Webサンプル 设置 # client cd client yarn # proxy cd proxy docker build -t <proxy> . 发射 # Server cd api go run server.go # client cd client yarn dev # proxy docker run -it -p 8080:8080 # Access...
grpc各语言使用官方示例代码;grpc各语言使用官方示例代码;grpc各语言使用官方示例代码grpc各语言使用官方示例代码
https://github.com/jinq0123/grpc-lua 是 Lua gRPC 库。 https://github.com/jinq0123/grpc-lua/issues/4 macos,ubuntu,centos都不能编译成功 ...该zip包是按README编译生成并实测通过的示例程序打包。
gRPC的通信方式-客户端流式、服务端流式、双向流式在Java的调用示例代码;gRPC的通信方式-客户端流式、服务端流式、双向流式在Java的调用示例代码.;gRPC的通信方式-客户端流式、服务端流式、双向流式在Java的调用示例...
gRPC示例一个gRPC示例架构
grpc-scala-sample:使用ScalaPB从grpc Java示例翻译而来
grpc库vs2015编译,grpc示例客户端及服务器,bin文件夹中已包含如何由proto文件生成代码的批处理bat。示例工程debug下需改为"多线程调试 DLL (/MDd)",release下改为"多线程 DLL (/MD)"。此库为32位版本。
grpcGolang grpc以及grpc-gateway的简单使用编译proto安装ProtocolBuffers以及gate-gateway,可以查找网站相关资料编译google.apicd protosprotoc --go_out=plugins=grpc:"." "google/api/*.proto"编译*.protocd ...
本课程将带您深入学习Kubernetes和gRPC技术,以及如何在云原生环境下进行微服务开发。我们将教授Kubernetes的基本概念、部署与管理,以及gRPC的使用和集成。通过实际案例和实践,您将掌握云原生微服务开发的核心知识...