标题:
Thrift架构介绍(5)
[打印本页]
作者:
look_w
时间:
2019-1-15 19:36
标题:
Thrift架构介绍(5)
下面是一些对大部分thrift支持的语言均可用的protocol:
binary:简单的二进制编码
Compact:具体见THRIFT-11
Json
ProcessorProcessor封装了从输入数据流中读数据和向数据数据流中写数据的操作。读写数据流用Protocol对象表示。Processor的结构体非常简单:
interface TProcessor { bool process(TProtocol in, TProtocol out) throws TException}
与服务相关的processor实现由编译器产生。Processor主要工作流程如下:从连接中读取数据(使用输入protocol),将处理授权给handler(由用户实现),最后将结果写到连接上(使用输出protocol)。
ServerServer将以上所有特性集成在一起:
创建一个transport对象
为transport对象创建输入输出protocol
基于输入输出protocol创建processor
等待连接请求并将之交给processor处理
应用举例下面,我们讨论thrift文件产生的特定语言代码。下面给出thrift文件描述:
namespace cpp thrift.examplenamespace java thrift.exampleenum TweetType { TWEET, RETWEET = 2, DM = 0xa, REPLY}struct Location { required double latitude; required double longitude;}struct Tweet { required i32 userId; required string userName; required string text; optional Location loc; optional TweetType tweetType = TweetType.TWEET; optional string language = "english";}typedef list<Tweet> TweetListstruct TweetSearchResult { TweetList tweets;}const i32 MAX_RESULTS = 100;service Twitter { void ping(), bool postTweet(1:Tweet tweet); TweetSearchResult searchTweets(1:string query); oneway void zip()}
Java语言产生的文件
一个单独的文件(Constants.java)包含所有的常量定义。
每个结构体,枚举或者服务各占一个文件
$ tree gen-java`– thrift `– example |– Constants.java |– Location.java |– Tweet.java |– TweetSearchResult.java |– TweetType.java `– Twitter.java类型
thrift将各种基本类型和容器类型映射成java类型:
bool: booleanbyte: bytei16: shorti32: inti64: longdouble: doublestring: Stringlist<t1>: List<t1>set<t1>: Set<t1>map<t1,t2>: Map<t1, t2>typedef
Java不支持typedef,它只使用原始类型,如,在上面的例子中,产生的代码中,TweetSearchResult会被还原成list tweets
Enum
Thrift直接将枚举类型映射成java的枚举类型。用户可以使用geValue方法获取枚举常量的值。此外,编译器会产生一个findByValue方法获取枚举对应的数值。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0