thrift框架C++和python实例

本文深入探讨Thrift框架,介绍如何定义thrift文件,包括基本类型、容器类型、服务定义等,并展示如何生成C++和Python接口代码。接着,详细解释了服务端和客户端的实现,以及各种Thrift服务器类型的选择,如TSimpleServer和TThreadPoolServer。通过实例,阐述了Thrift在跨语言交互中的作用。
摘要由CSDN通过智能技术生成

Thrift允许开发者在一个单独的语言无关的文件里,定义数据类型和服务接口(thrift文件),然后生成用来构建RPC客户和服务器所需的全部代码。

网络环境下,跨语言交互的一些关键组件:

  1. 类型(Types)——需要一种通用的类型系统。类型的转换上,编程者不需编写任何应用层以下的代码。
  2. 传输(Transport)——各个语言必须有一种双向传输原始数据的通用接口。一个给定的传输是如何实现的,应该与服务开发者无关。
  3. 协议(Protocol)——数据类型必须有某种方法,来使用传输层对它们自身编码和解码。同样地,应用开发者不需要关心该层。重要的是,数据能够以一种一致的、确定的方式被读写。
  4. 版本化(Versioning)——健壮的服务相关的数据类型必须提供一种自身版本化的机制。具体来说,它应当能在一个对象中添加或移除域,或改变一个函数的参数列表,而不干扰服务。
  5. 处理器(Processors)——最后,我们生成能够处理数据流以实现远程过程调用的代码。

1、定义thrift文件(一些用到的结构体和服务端口)

thrift的类型

1)基本类型:不支持无符号类型

  • byte: 有符号字节
  • i16: 16位有符号整数
  • i32: 32位有符号整数
  • i64: 64位有符号整数
  • double: 64位浮点数
  • string: 字符串

2)容器类型:集合中的元素可以是除了service之外的任何类型,包括exception

  • list<T>: 一系列由T类型的数据组成的有序列表,元素可以重复。直接翻译为STL vector,Java ArrayList,或脚本语言中的native array。
  • set<T>: 一系列由T类型的数据组成的无序集合,元素不可重复。翻译为STL set,Java HashSet,Python中的set,或PHP/Ruby中的native dictionary。
  • map<K, V>: 一个字典结构,严格唯一的键(keys)到值(values)的映射。翻译为STL map,Java HashMap,PHP associative array,或Python/Ruby dictionary。

3)结构体(struct)

struct DocContent{
    1:string content,
    2:string title,
}

4)枚举(enum)

enum DocContent{
    MALE,
    FEMALE
}

5)异常(exception)

  • 异常在语法和功能上都与结构体相同,生成的对象继承自各目标编程语言中适当的异常基类,以便与任何给定语言中的本地异常处理无缝地整合。

exception RequestException{
    1: i32 code;
    2: string reason;
}

6)常量(const)

const i32 MAX_RETRIES_TIME = 10

 7)可选与必选

struct People {
    1: required string name;
    2: optional i32 age;
}

8)服务(Services)

  • 对一个服务的定义在语法上等同于在面向对象编程中定义一个接口(或一个纯虚抽象类)。Thrift编译器生成实现该接口的客户与服务器存根。

service GetKeywordsString {
    KeywordsResult

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值