grpc 框架

本文链接:https://blog.csdn.net/sinat_34734636/article/details/82455916
gRPC
gRPC 是一款高性能、开源的 RPC 框架,产自 Google,基于 ProtoBuf 序列化协议进行开发,支持多种语言(Golang、Python、Java等)

gRPC 对 HTTP/2 协议的支持使其在 Android、IOS 等客户端后端服务的开发领域具有良好的前景。

gRPC 提供了一种简单的方法来定义服务,同时客户端可以充分利用 HTTP2 stream 的特性,从而有助于节省带宽、降低 TCP 的连接次数、节省CPU的使用等。

Anaconda自带grpc,因此不用安装,若是使用python,安装过程如下:
1. gRPC 的安装:

pip install grpcio
1
1. 安装 ProtoBuf 相关的 python 依赖库:

pip install protobuf
1
1. 安装 python grpc 的 protobuf 编译工具:

 pip install grpcio-tools
1
To DO
Define a gRPC interface: analysisapp.ptoto(在src目录下)
syntax = "proto3";

option java_multiple_files = true;
option java_package = "com.szl.smarttool.analysisapp";
option java_outer_classname = "AnalysisAppGrpcProto";
option objc_class_prefix = "HLW";

package analysisapp;

service AnalysisAppGrpcMessage {

    rpc dataCheck (stream SourceData) returns (stream DataStatus) {

    }
}

message SourceData {
    int32 status = 1;
    bytes currentData = 2;
    string cncData = 3;
    string startTime = 4;
    string endTime = 5;
    int32 modelStatus = 6;
    string uuid = 7;
    string model = 8;
}

message DataStatus {
    int32 status = 1;
    float time = 2;
    string uuid = 3;
}

Compile the protobuf
python -m grpc_tools.protoc -I. –python_out=. –grpc_python_out=. ./analysisapp.proto 
#在 src 目录中执行编译,会生成:analysisapp.py 与 analysisapp_grpc.py
1
2
analysisapp.py文件包含生成的请求类和响应类, analysisapp_grpc.py文件则包含生成的服务端骨架(skeleton)代码和客户端桩(stub)代码。

实践
使用 gRPC 定义一个接口,该接口实现对传入的数据进行大写的格式化处理。

创建项目 python demo 工程:

demo

client

main.py
example

init.py
data.proto
server

main.py
External Libraries

client目录下的 main.py 实现了客户端用于发送数据并打印接收到 server 端处理后的数据
server 目录下的 main.py 实现了 server 端用于接收客户端发送的数据,并对数据进行大写处理后返回给客户端
example 包用于编写 proto 文件并生成 data 接口
定义 gRPC 接口:

syntax = "proto3";

package example;

service FormatData {

  rpc DoFormat(Data) returns (Data){}

}

message Data {

  string text = 1;

}
编译 protobuf:
$ python -m grpc_tools.protoc -I. –python_out=. –grpc_python_out=. ./data.proto 
#在 example 目录中执行编译,会生成:data_pb2.py 与 data_pb2_grpc.py

实现 server 端:

#! /usr/bin/env python

# -*- coding: utf-8 -*-

import grpc

import time

from concurrent import futures

from example import data_pb2, data_pb2_grpc

_ONE_DAY_IN_SECONDS = 60 * 60 * 24

_HOST = 'localhost'

_PORT = '8080'

class FormatData(data_pb2_grpc.FormatDataServicer):

    def DoFormat(self, request, context):

        str = request.text

        return data_pb2.Data(text=str.upper())

def serve():

    grpcServer = grpc.server(futures.ThreadPoolExecutor(max_workers=4))

    data_pb2_grpc.add_FormatDataServicer_to_server(FormatData(), grpcServer)

    grpcServer.add_insecure_port(_HOST + ':' + _HOST)

    grpcServer.start()

    try:

        while True:

            time.sleep(_ONE_DAY_IN_SECONDS)

    except KeyboardInterrupt:

        grpcServer.stop(0)

if __name__ == '__main__':

    serve()

实现 client 端:

#! /usr/bin/env python

# -*- coding: utf-8 -*-

import grpc

from example import data_pb2, data_pb2_grpc

_HOST = 'localhost'

_PORT = '8080'

def run():

    conn = grpc.insecure_channel(_HOST + ':' + _PORT)

    client = data_pb2_grpc.FormatDataStub(channel=conn)

    response = client.DoFormat(data_pb2.Data(text='hello,world!'))

    print("received: " + response.text)

if __name__ == '__main__':

    run()

执行验证结果
先启动 server,之后再执行 client

client 侧控制台如果打印的结果为:“received: HELLO,WORLD!” ,证明 gRPC 接口定义成功
————————————————
版权声明:本文为CSDN博主「卖火柴的Alisa」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sinat_34734636/article/details/82455916

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值