博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Thrift 基础
阅读量:5935 次
发布时间:2019-06-19

本文共 1576 字,大约阅读时间需要 5 分钟。

1.前言

    Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目。Thrift通过一个中间语言 (IDL, 接口定义语言)来定义RPC的接口和数据类型,然后通过一个编译器生成不同语言的代码(目前支持C++,Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk和OCaml),并由生成的代码负责RPC协议层和传输层的实现。

    Thrift与我曾经使用过的ICE很像。ICE是由Zeroc公司开发的网络通信引擎。ICE框架除了完成跨语言调用之外,它提供的服务发布和注册功能(使用ICE registry),pub-sub通信模式,用于更新部署的软件的ICE patch和用于处理跨路由器的ICE glacier 是thrift没有的,这些额外的功能使得用户能更方便的开发自己的私有云服务平台。可以说,ICE比thrift更高一个层次。但是,个人不太喜欢它的很多实现,它们很多功能使用起来都不是很方便。(ICE 3.3.0)

    相反而言,另一个与Thrift有关系的开源项目是ZeroMQ。这个项目我个人十分看好,有望进入Linux 内核。ZeroMQ原先制定的目标为AMQ,但是做着做着慢慢演变成通信库了。它精于进程内,进程间,网络,和多播通信,提供了多种多样的通信模式,最大的特点是快(大量使用直接的内存拷贝),安全(通信双方均有消息缓存队列)。与Thrift相比,ZeroMQ低了一个层次,通信双方需要自己做序列化工作,而且没有直接提供rpc功能。

    Thrift有两个目标,跨语言通信和提供rpc功能。

2.架构

   

Thrift实际上是实现了C/S模式,通过代码生成工具将接口定义文件生成服务器端和客户端代码(可以为不同语言),从而实现服务端和客户端跨语 言的支持。用户在Thirft描述文件中声明自己的服务,这些服务经过编译后会生成相应语言的代码文件,然后用户实现服务(客户端调用服务,服务器端提服 务)便可以了。其中protocol(协议层, 定义数据传输格式,可以为二进制或者XML等)和transport(传输层,定义数据传输方式,可以为TCP/IP传输,内存共享或者文件共享等)被用 作运行时库。

 

3、 支持的数据传输格式、数据传输方式和服务模型

(1)支持的传输格式

TBinaryProtocol – 二进制格式.

TCompactProtocol – 压缩格式

TJSONProtocol – JSON格式

TSimpleJSONProtocol –提供JSON只写协议, 生成的文件很容易通过脚本语言解析。

TDebugProtocol – 使用易懂的可读的文本格式,以便于debug

(2) 支持的数据传输方式

TSocket -阻塞式socker

    提供了一个通用,简单的TCP/IP流socket。

TFramedTransport – 以frame为单位进行传输,非阻塞式服务中使用。

TFileTransport – 以文件形式进行传输。

TMemoryTransport – 将内存用于I/O. java实现时内部实际使用了简单的ByteArrayOutputStream。

TZlibTransport – 使用zlib进行压缩, 与其他传输方式联合使用。当前无java实现。

(3)支持的服务模型

TSimpleServer – 简单的单线程服务模型,常用于测试

TThreadPoolServer – 多线程服务模型,使用标准的阻塞式IO。

TNonblockingServer – 多线程服务模型,使用非阻塞式IO(需使用TFramedTransport数据传输方式)

参考资料

 

 

   

转载地址:http://tfjtx.baihongyu.com/

你可能感兴趣的文章
git使用详解
查看>>
Struts2(接受表单参数)请求数据自动封装和数据类型转换
查看>>
08:石头剪刀布
查看>>
【SAP HANA】新建账户和数据库(2)
查看>>
Rsync服务介绍与配置
查看>>
JQuery获取浏览器窗口的可视区域高度和宽度,滚动条高度
查看>>
CentOS 6.4下编译安装MySQL 5.6.14 (转)
查看>>
在同一台电脑上添加多个ssh key
查看>>
直方图、基数、选择性、群集因子
查看>>
ASP.NET Web API身份验证和授权
查看>>
dbcp 详细配置
查看>>
如何定义StrokeIt手势 常用StrokeIt手势大全
查看>>
LCA 最近公共祖先
查看>>
23种设计模式之工厂方法
查看>>
Docker
查看>>
Java笔记4:JDBC纯驱动方式连接Oracle
查看>>
java 内部类、匿名内部类、嵌套类的使用
查看>>
Scala使用Akka模拟RPC机制代码
查看>>
Linux下使用Fastboot给手机刷ROM
查看>>
怎样在tsung中使用动态參数(二)
查看>>