首先安装grpc 服务
pip3 install grpcio
pip3 install grpcio-tools
使用grpc_tools工具将.proto文件编译成py文件
切换到*.proto所在的文件根目录,执行命令,生成decimal_pb2.py和decimal_pb2_grpc.py:
python -m grpc_tools.protoc -I./ --python_out=./ --grpc_python_out=./ helloworld.proto
对于简单的请求,请求参数只有key: value(string/int/bool)
下面我们来看service.proto:
他定义了一个service AssetTransferRpcService, 这个在python3中,我们可以看作是他定义了一个java或者python3的类,类里面包含:
1、Transfer
2、GetTransferRecord
3、GetFuturesBalance
这三个为类中的方法
rpc Transfer(TransferRequest) returns(TransferResponse){};:
TransferRequest:这个是请求体入参,我们传递请求参数的地方。
TransferResponse:响应体,响应结果按照这个格式进行正确的返回。
那么对于TransferRequest,这个请求体的入参参数是什么?
我们通常可以在message.proto中,找到对应的请求参数定义
TransferResponse:响应体,响应的内容包含什么?
我们通常可以在message.proto中,找到对应的请求参数定义
对于复杂的请求,请求参数key: list [ value(string/int/bool) ]
我们看下proto文件中是如何定义的
service AssetOperateRpcService : 这个是一个类。类下面有几个方法
对于请求体,
message BatchAssetOperateRequest{
int64 userId = 1;
repeated AssetOperateParam asset_updates = 2;
}
请求体包含两部分,一个userId,还有一个asset_updates,但是asset_updates又是一个重复的AssetOperateParam,也就是数组中,有两个一样的请求参数。
对于message AssetOperateParam,他的构造健值对,又是一个新的。那么我们要怎么进行参数拼接呢?接下来继续看。
我们要进行客户端的连接以及进行header头传递是一样的,只是在请求体处不一样
从上面我们可以看出,asset_param_3 = message_pb2.AssetOperateParam以及asset_param_4 = message_pb2.AssetOperateParam。
我们需要先构建出请求体数组中的参数,还是使用message_pb2这个文件,.AssetOperateParam,证明是组装我们数组中的请求体。
数组中的请求体组装完成后,我们进行批量的请求体的组装:
第一个是userId=1239248,第二个是asset_updates=[asset_param_3, asset_param_4]。
批量请求体的数据组装完成后,还是利用message_pb2这个文件, .BatchAssetOperateRequest (这个正是我们service的入参的参数) ,,组装我们数组中的请求体,
最后调用客户端stub,进行stub 段的请求发送
如果有需要,请加小哥V ❤️:huangege1224(欢哥哥1224的拼音)
网友评论