xmwang0 2020-06-14
grpc 一个rpc框架。什么是rpc?简单来说就是远程过程调用。
举个例子,比如在C#代码中直接调用python 中写的方法,或者一个C#进程调用另一个C#进程中的方法,或者其他语言之间的互相调用
grpc 学习地址:https://www.grpc.io/
一种语言,,文件类型.proto
作用:定义进程之间传递参数,以及返回的类型,还有进程直接可调用的方法。具体书写方法可百度
python 部分用的编辑器为vscode
syntax = "proto3"; //表示用的是proto3,之前的版本是2,通过这行代码来区分 //option csharp_namespace = "GrpcClient"; C#的命名空间,引用时要用 package grpcDemo; //定义传递的参数 以下两个参数实体,其实是可以替换互用的,就是传递和返回参数变量 message Request{ string info = 1; } message Response{ string info =1; } //定义进程之间调用的方法 service GrpcDemo { rpc GetMessgae(Request) returns(Response){} }
在vs code 打开cmd 命令窗口,分别执行以下命令python -m pip install grpcio
python -m pip install grpcio-tools
python -m grpc_tools.protoc -I./ --python_out=. --grpc_python_out=. ./grpcDemo.proto
import grpc import grpcDemo_pb2 import grpcDemo_pb2_grpc from concurrent import futures class PyServer(grpcDemo_pb2_grpc.GrpcDemoServicer): def GetMessgae(self,requet,context): return grpcDemo_pb2.Response(info=‘Hello‘) def serve(): server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) grpcDemo_pb2_grpc.add_GrpcDemoServicer_to_server(PyServer(),server) server.add_insecure_port(‘127.0.0.1:5001‘) server.start() server.wait_for_termination() if __name__ == ‘__main__‘: #logging.basicConfig() serve()
F5运行 ,服务就完成了
这部分教程请看微软官网地址:https://docs.microsoft.com/en-us/aspnet/core/grpc/clientfactory?view=aspnetcore-3.1