首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Thrift架构介绍(5)

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方法获取枚举对应的数值。
返回列表