关闭

Thrift基础知识汇总--------------(从官网资料中总结的)

428人阅读 评论(0) 收藏 举报
分类:

一、简介

a)        Thrift是一个跨语言的,高效的序列化的传输框架,内置代码生成引擎,用来在不同的语言之间创建高效无缝的服务接口,支持的语言有:C++,JAVA,PYTHON,PHP,C#等。

二、入门

a)        去thrift官网下载thrift框架;

b)        如果在linux下使用,需要编译安装thrift;如果在window上使用,则直接在命令行中使用即可;

c)        编写一个thrift的idl文件;里面写好命名空间、数据类型和接口;

d)        在命令行下调用thrift –gen java –gen py test.thrift即可;无需考虑哪个做客户端,哪个做服务端;命令完成后,会在当前目录下,生成gen-java和gen-py文件;

e)        命令格式:thrift --gen <language> <Thrift filename>

三、基本类型:Base Types

a)        基本类型的的选择以简洁、清晰为目标,重点关注在所有编程语言中的关键类型;

b)        基本类型介绍:

                        i.             bool:布尔值,真和假;

                      ii.             byte:一个8位的有符号整数;

                     iii.             i16:一个16位的有符号整数;

                     iv.             i32:一个32位的有符号整数;

                      v.             i64:一个64位的有符号整数;

                     vi.             double:一个64位的浮点数;

                   vii.             string:使用utf-8编码的字符串;

c)        注意,基本类型中没有无符号整数,这是因为很多编程语言中都没有无符号数。

d)        特殊类型:

                        i.             binary:二进制序列;

e)        容器类型:

                        i.             list:有序列表;

                      ii.             set:无序列表,元素具有惟一性;

                     iii.             map:键值对;映射类型;

f)         list: An ordered list ofelements. Translates to an STL vector, Java ArrayList, native arrays inscripting languages, etc. set: An unordered set of unique elements.Translates to an STL set, Java HashSet, set in Python, etc. Note: PHP does notsupport sets, so it is treated similar to a List map: A map of strictlyunique keys to values. Translates to an STL map, Java HashMap, PHP associativearray, Python/Ruby dictionary, etc. While defaults are provided, the typemappings are not explicitly fixed. Custom code generator directives have beenadded to allow substitution of custom types in various destination languages.

g)        注意map的key,尽量用基本类型,不要用容器类型;

四、异常

a)        为了同本地语言的异常无缝集成,thrift异常,通常会继承于本地语言的合适的异常类,除此之外,在功能上等价于thrift的结构体;

五、服务接口:

a)        Thrift接口通常要用到thrift的类型,定义一个service在语义上等同于定义一个interface,或者一个抽象类,thrift编译器会自动帮你生成相应的客户端和服务端的存根;在服务端,你需要继承这个stub,实现自己的业务代码;

b)        一个service由一系列的方法组成,每个方法可能有参数和返回类型;

c)        方法的修饰符:

                        i.             async:异步请求,不等待结果即返回;

                      ii.             oneway:好像和上面一样啊

六、其它

a)        关于命名空间:

                        i.             namespace cpp tutorial

                      ii.             namespace d tutorial

                     iii.             namespace java tutorial

                     iv.             namespace php tutorial

                      v.             namespace perl tutorial

                     vi.             还支持*号

b)        关于Include

                        i.             支持C++文件的包含

                      ii.             include "shared.thrift",引入thrift文件

c)        关于注视

                        i.             支持c语言的单行和多行注释

                      ii.             支持#号的单行注视

d)        关于typedef

                        i.             类似于别名的效果

e)        支持const常量定义,支持enum枚举定义

f)         Struts、exception、方法异常参数和方法的形式参数前,记得有编号(一个整型标识)

g)        变量的定义

                        i.             可以有默认值,比如:  i32 num1=0

                      ii.             可以设置为“选择性的”,比如: optional string comment

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:22478次
    • 积分:350
    • 等级:
    • 排名:千里之外
    • 原创:5篇
    • 转载:40篇
    • 译文:1篇
    • 评论:2条
    文章分类