「Protocol Buffer」之PB在gRPC中的应用

相关库的安装

$ python -m pip ×××tall grpcio
$ python -m pip ×××tall grpcio-tools googleapis-common-protos

Demo程序功能概述

服务器端存在Test_service类中定义了my_function方法,客户端通过gRPC协议进行远程调用;该方法实现的功能是将接受到的字符串内容全部改为大写并返回

PB接口描述文件定义

syntax = "proto3";
package data;

#定义数据结构
message Data{
    string text=1;
}

#定义服务接口,即声明我要调用目标服务器上的哪个函数
service Test_service{
    #定义调用函数名称、参数类型与返回数据类型
    rpc my_function(Data) returns (Data) {}
}

编译

python3 -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. ./data.proto

客户端代码

#! /usr/bin/env python
# -*- coding: utf-8 -*-
import grpc
import data_pb2, data_pb2_grpc

_HOST = ‘127.0.0.1‘
_PORT = ‘8080‘

def run():
    conn = grpc.×××ecure_channel(_HOST + ‘:‘ + _PORT)
    client = data_pb2_grpc.Test_serviceStub(channel=conn)
    response = client.my_function(data_pb2.Data(text=‘hello,world!‘))
    print("received: " + response.text)

if __name__ == ‘__main__‘:
    run()

服务器代码

#! /usr/bin/env python
# -*- coding: utf-8 -*-
import grpc
import time
from concurrent import futures
import data_pb2, data_pb2_grpc

_ONE_DAY_IN_SECONDS = 60 * 60 * 24
_HOST = ‘127.0.0.1‘
_PORT = ‘8080‘

class Test_service(data_pb2_grpc.Test_serviceServicer):
    def my_function(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_Test_serviceServicer_to_server(Test_service(), grpcServer)
    grpcServer.add_×××ecure_port(_HOST + ‘:‘ + _PORT)
    grpcServer.start()
    try:
        while True:
            time.sleep(_ONE_DAY_IN_SECONDS)
    except KeyboardInterrupt:
        grpcServer.stop(0)

if __name__ == ‘__main__‘:
    serve()

客户端运行结果

$ python3 client.py
received: HELLO,WORLD!

远程方法调用成功!

原文地址:https://blog.51cto.com/13384175/2409070

时间: 2024-10-10 06:03:56

「Protocol Buffer」之PB在gRPC中的应用的相关文章

「Protocol Buffer」之PB在HTTP协议中的应用

「Protocol Buffer」系列教程 1.「Protocol_Buffer」之基本使用与格式定义2.「Protocol Buffer」之PB在HTTP协议中的应用 客户端代码 本例中分别演示了http+json的通信方式与http+Protocol Buffer的通信方式:本例中的测试用例使用qtaf框架进行管理,实际应用可以视需求而定,只关注核心逻辑即可: # -*- coding: utf-8 -*- from testbase.testcase import TestCase fro

Protocol Buffer技术详解(语言规范)

Protocol Buffer技术详解(语言规范) 该系列Blog的内容主体主要源自于Protocol Buffer的官方文档,而代码示例则抽取于当前正在开发的一个公司内部项目的Demo.这样做的目的主要在于不仅可以保持Google文档的良好风格和系统性,同时再结合一些比较实用和通用的用例,这样就更加便于公司内部的培训,以及和广大网友的技术交流.需要说明的是,Blog的内容并非line by line的翻译,其中包含一些经验性总结,与此同时,对于一些不是非常常用的功能并未予以说明,有兴趣的开发者

Hadoop基于Protocol Buffer的RPC实现代码分析-Server端--转载

原文地址:http://yanbohappy.sinaapp.com/?p=110 最新版本的Hadoop代码中已经默认了Protocol buffer(以下简称PB,http://code.google.com/p/protobuf/)作为RPC的默认实现,原来的WritableRpcEngine已经被淘汰了.来自cloudera的Aaron T. Myers在邮件中这样说的“since PB can provide support for evolving protocols in a co

Protocol Buffer基本介绍

转自:http://www.cnblogs.com/stephen-liu74/archive/2013/01/02/2841485.html 该系列Blog的内容主体主要源自于Protocol Buffer的官方文档,而代码示例则抽取于当前正在开发的一个公司内部项目的Demo.这样做的目的主要在于不仅可以保持Google文档的良好风格和系统性,同时再结合一些比较实用和通用的用例,这样就更加便于公司内部的培训,以及和广大网友的技术交流.需要说明的是,Blog的内容并非line by line的翻

Protocol Buffer详解

1.Protocol Buffer 概念 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件.他们用于 RPC 系统和持续数据存储系统. Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化.它很适合做数据存储或 RPC 数据交换格式.可用于通讯协议.数据存储等领域的语言无关

mac下安装protocol buffer并用python解析

由于业务需要,项目中需要用到google的一种高效的可扩展的结构化数据存储方式protocol buffer(以下简称pb).很多人可能对这个新东西不熟悉,大家都知道xml,json,确很少听过pb,下面我就粗劣总结一下pb在mac环境下的搭建以及用python解析的简单过程. 首先下载最新pb源码,放到相应的文件夹解压. 安装步骤如下(强调一下:如安装不成功,就以管理员身份安装即在每句命令前加上sudo): 这句如果解压完了就不需要了tar -xzf protobuf-2.1.0.tar.gz

快来看看Google出品的Protocol Buffer,别只会用Json和XML了

前言 习惯用 Json.XML 数据存储格式的你们,相信大多都没听过Protocol Buffer Protocol Buffer 其实 是 Google出品的一种轻量 & 高效的结构化数据存储格式,性能比 Json.XML 真的强!太!多! 由于 Google出品,我相信Protocol Buffer已经具备足够的吸引力 今天,我将献上一份 Protocol Buffer的介绍 & 使用攻略,希望你们会喜欢. 目录 1. 定义 一种 结构化数据 的数据存储格式(类似于 `XML.Json

这是一份很有诚意的 Protocol Buffer 语法详解

前言 习惯用 Json.XML 数据存储格式的你们,相信大多都没听过Protocol Buffer Protocol Buffer 其实 是 Google出品的一种轻量 & 高效的结构化数据存储格式,性能比 Json.XML 真的强!太!多! 由于 Google出品,我相信Protocol Buffer已经具备足够的吸引力 今天,我将详细介绍Protocol Buffer 的语法 & 如何去构建Protocol Buffer 的消息模型 阅读本文前请先阅读: 1. 快来看看Google出品

Linux 小知识翻译 - 「协议(protocol)」

对于理解服务器和网络来说,「协议」是不可缺少的概念. 「协议(protocol)」有「规则,规定」的意思. 实际上「协议」的函数很广,在通信领域,「协议」规定了「在通信时,什么样的情况下,以什么样的顺序,什么样的方式交互什么样的数据」. 抽象的去理解「协议」可能会比较困难,下面来举个例子. 通过Web以HTML方式交互时使用的协议是「HTTP」(Hyper Text Transfer Protocol).这个协议最重要的就是规定了服务器和客户端之间以HTML方式交互的规则. 比如,客户端连接上服