打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
thrift框架
Thrift部署服务
一般的步骤为:编写服务说明,保存到.thrift文件->编译.thrift文件,生成相应的语言源代码->编写client端和server端代码。

语法
数据类型
Thrift 脚本可定义的数据类型包括以下几种类型:
基本类型:
bool:布尔值,true 或 false
byte:8 位有符号整数
i16:16 位有符号整数
i32:32 位有符号整数
i64:64 位有符号整数
double:64 位浮点数
string:未知编码文本或二进制字符串
结构体类型:
struct:定义公共的对象,类似于 C 语言中的结构体定义
容器类型:
List:一系列t1类型的元素组成的有序表,元素可以重复
Set:一系列t1类型的元素组成的无序表,元素唯一
Map<t1,t2>:key/value对(key的类型是t1且key唯一,value类型是t2)
异常类型:
exception 异常在语法和功能上类似于结构体,它在语义上不同于结构体—当定义一个RPC服务时,开发者可能需要声明一个远程方法抛出一个异常。
服务类型:
service:对应服务的类

注释
Thrfit支持shell注释风格,C/C++语言中单行或者多行注释风格

1# This is a valid comment.
2 
3/*
4* This is a multi-line comment.
5*/
6 
7// C++/Java style single-line comments work just as well.

命名空间
Thrift中的命名空间同C++中的namespace和java中的package类似,它们均提供了一种组织(隔离)代码的方式。因为每种语言均有自己的命名空间定义方式(如python中有module),thrift允许开发者针对特定语言定义namespace:

1namespace cpp com.example.project
2namespace java com.example.project
3namespace php App.Api

文件包含
Thrift允许thrift文件包含,用户需要使用thrift文件名作为前缀访问被包含的对象

1include "tweet.thrift"

定义常量
Thrift允许用户定义常量,复杂的类型和结构体可使用JSON形式表示

1const i32 INT_CONST = 1234;
2const map<string,string> MAP_CONST = {"hello": "world", "goodnight": "moon"}

定义结构体

01struct Tweet {
02 
031: required i32 userId; // 每个域有一个唯一的,正整数标识符
04 
052: required string userName; // 每个域可以标识为required或者optional(也可以不注明)
06 
073: required string text;
08 
094: optional Location loc; // 结构体可以包含其他结构体
10 
1116: optional string language = "english" // 域可以有缺省值
12 
13}
14 
15struct Location { // 一个thrift中可定义多个结构体,并存在引用关系
16 
171: required double latitude;
18 
192: required double longitude;
20 
21}

定义服务
Thrift编译器会根据选择的目标语言为server产生服务接口代码,为client产生桩代码

01//“Twitter”与“{”之间需要有空格!!!
02service Twitter {
03 
04// 方法定义方式类似于C语言中的方式,它有一个返回值,一系列参数和可选的异常
05 
06// 列表. 注意,参数列表和异常列表定义方式与结构体中域定义方式一致.
07 
08void ping(), // 函数定义可以使用逗号或者分号标识结束
09 
10bool postTweet(1:Tweet tweet); // 参数可以是基本类型或者结构体,参数是只读的(const),不可以作为返回值!!!
11 
12TweetSearchResult searchTweets(1:string query); // 返回值可以是基本类型或者结构体
13 
14// ”oneway”标识符表示client发出请求后不必等待回复(非阻塞)直接进行下面的操作,
15 
16// ”oneway”方法的返回值必须是void
17 
18oneway void zip() // 返回值可以是void
19 
20}

函数中参数列表的定义方式与struct完全一样,Service支持继承,一个service可使用extends关键字继承另一个service

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Thrift使用指南 | 董的博客
thrift 小结
关于thrift
MessagePack, Protocol Buffers和Thrift序列化框架原理和比较说明
头文件中定义const 全局变量应注意的问题
Thrift之代码生成器Compiler原理及源码详细解析3
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服