Thrift 是apache开源的rpc框架,支持多种语言绑定。相对protobuf,提供server,序列化等一站式解决方案。
一. 下载
http://thrift.apache.org/download
二. 编写IDL
namespace java org.sun.service service SimpleThriftService { string getStr( 1:string src, 2:string dst ); i32 getInt( 1:i32 val ); map<i32,i32> getMap( 1:string name ); }
该IDL是用于生成各语言绑定的描述文件,pb中对应*.proto文件。thrift的IDL支持数据类型比较丰富,包含struct/map。
Thrift Types:
Base Types:
bool: A boolean value (true or false)
byte: An 8-bit signed integer
i16: A 16-bit signed integer
i32: A 32-bit signed integer
i64: A 64-bit signed integer
double: A 64-bit floating point number
string: A text string encoded using UTF-8 encoding
Structs
Containers:
list, set, map
三. 生成Java Binding
thrift --gen java test_service.thrift
当前目录生成:./gen-java/org/sun/service/SimpleThriftService.java
四. 编写实现类
// 实现Binding class的Iface接口 public class ThriftServiceImpl implements SimpleThriftService.Iface { public String getStr(String src, String dst) throws TException { System.out.println( "Input: " + src + "\t" + dst ); String strResult = String.format( "%s-%s", src, dst ); return strResult; } public int getInt(int val) throws TException { int sum = 10*val; return sum; } public Map<Integer, Integer> getMap(String name) throws TException { System.out.println( "Name: " + name ); Map<Integer,Integer> pMap = new HashMap<Integer,Integer>(); pMap.put( 1, 1 ); return pMap; } }
五. 启动server
Thrift对外提供工作模式:TSimpleServer、TNonblockingServer、TThreadPoolServer、TThreadedSelectorServer等。
Thrift支持通信协议格式:TCompactProtocol、TBinaryProtocol、TJSONProtocol等。
/** * Thrift Server */ private static void main( String[] args) throws TTransportException { ThriftServiceImpl m_ServImpl = new ThriftServiceImpl(); // 实现类 TProcessor tProcessor = new SimpleThriftService.Processor<SimpleThriftService.Iface>( m_ServImpl ); TNonblockingServerSocket nioSocket = new TNonblockingServerSocket( 12345 ); // 设置参数 TNonblockingServer.Args tnbArgs = new TNonblockingServer.Args(nioSocket); tnbArgs.processor(tProcessor); // 设置处理器 tnbArgs.transportFactory(new TFramedTransport.Factory()); // 按块方式传输 tnbArgs.protocolFactory(new TBinaryProtocol.Factory()); // 二进制序列化协议 // 启动TCP服务 m_Server = new TNonblockingServer( tnbArgs ); // 循环提供服务 m_Server.serve(); }
六. Client测试
/** * Thrift Client */ public static void main(String[] args) { // 建立tcp client TTransport m_Socket = new TFramedTransport( new TSocket( "127.0.0.1", 12345, 2000 ) ); // 设置二进制协议 TProtocol protocol = new TBinaryProtocol( m_Socket ); SimpleThriftService.Client client = new SimpleThriftService.Client(protocol); try { m_Socket.open(); // 调用远程函数 String result = client.getStr( "hello", "world" ); System.out.println( "Result: " + result ); m_Socket.close(); } catch (TException e) { e.printStackTrace(); } }
七. 抓包分析
Wireshark居然能识别thrift协议,thrift协议包括header(18字节) + Data,很明显thrift未对字段做压缩,相对于pb比较占用网络带宽。
参考文章
相关推荐
Thrift使用示例代码,主要配合博客《由浅入深了解thrift》写的测试代码
本文档详细说明了Linux和windows系统下配置thrift环境和hbaseC++客户端的使用。
详细介绍了Apache Thrift在Ubuntu以及Windows下基于C++和Java语言的安装和运行。附有小例子,亲自测试通过。所述方法网上应该有教程,但大多零散不统一或者不完整,因此本人整理了一份,特来分享。
使用thrift、websocket在javascript和c++之间建立rpc调用机制。 如果要使用js+html来写界面,cpp来写底层业务逻辑,这就非常有用了。 当然,如果底层不用cpp来写,也可以参考本代码的js对thrift的rpc包装。
NULL 博文链接:https://gemantic.iteye.com/blog/1199214
网上一直搜不到Windows下QT使用thrift的例子,自己整了个 QT版本 5.8.0 Boost版本 boost_1_61_0 Thrift版本 thrift-0.10.0
1、编译后的thrift C++和.net库文件; ...4、thrift使用了boost,C++开发需要包含boost相关库和头文件; 5、boost编译的C++库和头文件下载地址:http://download.csdn.net/detail/xzhswust/8395491
使用wireshark抓取thrift协议接口调用
java代码使用thrift2操作hbase示例,thrift2连接hbase添加数据,单条查找,删除数据,根据扫描器查找,修改数据等测试实例
thrift的使用一定会依赖boost,但是因为boost过大,附件没有包含,还需要自行编译
ActorDB-JavaThrift 在Java中通过Thrift使用ActorDB的简短示例。
Thrift 在Windows下的安装与实例 vs2010 本文的不同之处在于,不借助Cygwin或者MinGW,只用VS2010,和Thrift官网下载的源文件,安装Thrift并使用。 本文可用于thrift-0.9.1.tar.gz,thrift-0.10.0.tar.gz版本安装
这是对Facebook开源框架Thrift的分享,并且附有示例代码。
Apache Thrift is an open source cross language serialization and RPC framework. With support for over 15 programming languages, Apache Thrift can play an important role in a range of distributed ...
windows环境下thrift.exe开发thrift
thrift使用的一个简单的例子,有助于初学者对thrift的理解和使用。
thrift源码thrift源码thrift源码thrift源码thrift源码thrift源码thrift源码thrift源码thrift源码thrift源码thrift源码thrift源码thrift源码thrift源码thrift源码thrift源码thrift源码thrift源码thrift源码thrift源码...
thrift 安装包。
php 使用thrift客户端访问服务器测试 下载后 放到站点根目录,设置 thrift_test.php里的 $socket = new TSocket('10.200.28.43', 10001); 修改为默认服务器和端口 后 直接访问 http://localhost/thrift_test.php