<版本号,2字节><无用字段,1字节><消息类型,1字节><方法名长度,4字节><方法名,n字节><序列号,4字节><参数…,n字节>
<参数…,n字节>参考struct
Field
<Field类型,1字节><Field Id,2字节>
<Field类型(stop),1字节>
上面的Field Id对应下面例子中”:”前面的数字:
struct Order {
1: required i64 orderId;
2: required i64 userId;
3: required string status;
}
Field
stop
<Field类型(stop),1字节> -> <0x00(0),1字节>
void
bool
<Field类型(bool),1字节><Field Id,2字节><值,bool(1字节)> -> <0x02(2),1字节><Field Id,2字节><值,bool(1字节)>
byte
<Field类型(byte),1字节><Field Id,2字节><值,byte(1字节)> -> <0x03(3),1字节><Field Id,2字节><值,byte(1字节)>
double
<Field类型(double),1字节><Field Id,2字节><值,double(8字节)> -> <0x04 (4),1字节><Field Id,2字节><值,double(8字节)>
i16
<Field类型(i16),1字节><Field Id,2字节><值,i16(2字节)> -> <0x06(6),1字节><Field Id,2字节><值,i16(2字节)>
i32
<Field类型(i32),1字节><Field Id,2字节><值,i32(4字节)> -> <0x08(8),1字节><Field Id,2字节><值,i32(4字节)>
i64
<Field类型(i64),1字节><Field Id,2字节><值,i64(8字节)> -> <0x0A(10),1字节><Field Id,2字节><值,i64(8字节)>
string
<Field类型(string),1字节><Field Id,2字节><string类型字段长度,4字节><值,n字节> -> <0x0B(11),1字节><Field Id,2字节><string类型字段长度,4字节><值,n字节>
struct
<Field类型(struct),1字节><Field Id,2字节>…<Field类型(stop),1字节> -> <0x0C(12),1字节><Field Id,2字节>… <0x00(0),1字节>
<Field类型(struct),1字节><Field Id,2字节>
<Field类型,1字节><Field Id,2字节><值,bool(1字节)>|
<Field类型,1字节><Field Id,2字节><值,byte(1字节)>|
<Field类型,1字节><Field Id,2字节><值,i16(2字节)>|
<Field类型,1字节><Field Id,2字节><值,i32(4字节)>|
<Field类型,1字节><Field Id,2字节><值,i64(8字节)>|
<Field类型,1字节><Field Id,2字节><值,double(8字节)>|
<Field类型,1字节><Field Id,2字节><string类型字段长度,4字节><值,n字节> |
(<Field类型(struct),1字节><Field Id,2字节>
<Field类型,1字节><Field Id,2字节><值,bool(1字节)>|
<Field类型,1字节><Field Id,2字节><值,byte(1字节)>|
<Field类型,1字节><Field Id,2字节><值,i16(2字节)>|
<Field类型,1字节><Field Id,2字节><值,i32(4字节)>|
<Field类型,1字节><Field Id,2字节><值,i64(8字节)>|
<Field类型,1字节><Field Id,2字节><值,double(8字节)>|
<Field类型,1字节><Field Id,2字节><string类型字段长度,4字节><值,n字节> |
…
<Field类型(stop),1字节>)
…
<Field类型(stop),1字节>
几种特殊情况下的struct
方法参数(args)
方法调用时需要传递的参数通过struct进行序列化。在scheme中实现。
<Field类型,1字节><Field Id,2字节><值,bool(1字节)>|
<Field类型,1字节><Field Id,2字节><值,byte(1字节)>|
<Field类型,1字节><Field Id,2字节><值,i16(2字节)>|
<Field类型,1字节><Field Id,2字节><值,i32(4字节)>|
<Field类型,1字节><Field Id,2字节><值,i64(8字节)>|
<Field类型,1字节><Field Id,2字节><值,double(8字节)>|
<Field类型,1字节><Field Id,2字节><string类型字段长度,4字节><值,n字节> |
(<Field类型(struct),1字节><Field Id,2字节>
<Field类型,1字节><Field Id,2字节><值,bool(1字节)>|
<Field类型,1字节><Field Id,2字节><值,byte(1字节)>|
<Field类型,1字节><Field Id,2字节><值,i16(2字节)>|
<Field类型,1字节><Field Id,2字节><值,i32(4字节)>|
<Field类型,1字节><Field Id,2字节><值,i64(8字节)>|
<Field类型,1字节><Field Id,2字节><值,double(8字节)>|
<Field类型,1字节><Field Id,2字节><string类型字段长度,4字节><值,n字节> |
…
<Field类型(stop),1字节>)|
…
<Field类型(stop),1字节>
方法返回
方法调用后返回值通过struct进行序列化。在scheme中实现。
map
<Field类型(map),1字节><Field Id,2字节>< map中key类型,1字节>< map中value类型,1字节>< set中元素个数,4字节>
((<Field类型,1字节><Field Id,2字节><值,bool(1字节)>|
<Field类型,1字节><Field Id,2字节><值,byte(1字节)>|
<Field类型,1字节><Field Id,2字节><值,i16(2字节)>|
<Field类型,1字节><Field Id,2字节><值,i32(4字节)>|
<Field类型,1字节><Field Id,2字节><值,i64(8字节)>|
<Field类型,1字节><Field Id,2字节><值,double(8字节)>|
<Field类型,1字节><Field Id,2字节><string类型字段长度,4字节><值,n字节> |
(<Field类型(struct),1字节><Field Id,2字节>
<Field类型,1字节><Field Id,2字节><值,bool(1字节)>|
<Field类型,1字节><Field Id,2字节><值,byte(1字节)>|
<Field类型,1字节><Field Id,2字节><值,i16(2字节)>|
<Field类型,1字节><Field Id,2字节><值,i32(4字节)>|
<Field类型,1字节><Field Id,2字节><值,i64(8字节)>|
<Field类型,1字节><Field Id,2字节><值,double(8字节)>|
<Field类型,1字节><Field Id,2字节><string类型字段长度,4字节><值,n字节> |
…
<Field类型(stop),1字节>))
(<Field类型,1字节><Field Id,2字节><值,bool(1字节)>|
<Field类型,1字节><Field Id,2字节><值,byte(1字节)>|
<Field类型,1字节><Field Id,2字节><值,i16(2字节)>|
<Field类型,1字节><Field Id,2字节><值,i32(4字节)>|
<Field类型,1字节><Field Id,2字节><值,i64(8字节)>|
<Field类型,1字节><Field Id,2字节><值,double(8字节)>|
<Field类型,1字节><Field Id,2字节><string类型字段长度,4字节><值,n字节> |
(<Field类型(struct),1字节><Field Id,2字节>
<Field类型,1字节><Field Id,2字节><值,bool(1字节)>|
<Field类型,1字节><Field Id,2字节><值,byte(1字节)>|
<Field类型,1字节><Field Id,2字节><值,i16(2字节)>|
<Field类型,1字节><Field Id,2字节><值,i32(4字节)>|
<Field类型,1字节><Field Id,2字节><值,i64(8字节)>|
<Field类型,1字节><Field Id,2字节><值,double(8字节)>|
<Field类型,1字节><Field Id,2字节><string类型字段长度,4字节><值,n字节> |
…
<Field类型(stop),1字节>)))
…
set
<Field类型(set),1字节><Field Id,2字节>< set中元素类型,1字节>< set中元素个数,4字节>
<Field类型,1字节><Field Id,2字节><值,bool(1字节)>|
<Field类型,1字节><Field Id,2字节><值,byte(1字节)>|
<Field类型,1字节><Field Id,2字节><值,i16(2字节)>|
<Field类型,1字节><Field Id,2字节><值,i32(4字节)>|
<Field类型,1字节><Field Id,2字节><值,i64(8字节)>|
<Field类型,1字节><Field Id,2字节><值,double(8字节)>|
<Field类型,1字节><Field Id,2字节><string类型字段长度,4字节><值,n字节> |
(<Field类型(struct),1字节><Field Id,2字节>
<Field类型,1字节><Field Id,2字节><值,bool(1字节)>|
<Field类型,1字节><Field Id,2字节><值,byte(1字节)>|
<Field类型,1字节><Field Id,2字节><值,i16(2字节)>|
<Field类型,1字节><Field Id,2字节><值,i32(4字节)>|
<Field类型,1字节><Field Id,2字节><值,i64(8字节)>|
<Field类型,1字节><Field Id,2字节><值,double(8字节)>|
<Field类型,1字节><Field Id,2字节><string类型字段长度,4字节><值,n字节> |
…
<Field类型(stop),1字节>)
…
list
<Field类型(list),1字节><Field Id,2字节><list中元素类型,1字节><list中元素个数,4字节>
<Field类型,1字节><Field Id,2字节><值,bool(1字节)>|
<Field类型,1字节><Field Id,2字节><值,byte(1字节)>|
<Field类型,1字节><Field Id,2字节><值,i16(2字节)>|
<Field类型,1字节><Field Id,2字节><值,i32(4字节)>|
<Field类型,1字节><Field Id,2字节><值,i64(8字节)>|
<Field类型,1字节><Field Id,2字节><值,double(8字节)>|
<Field类型,1字节><Field Id,2字节><string类型字段长度,4字节><值,n字节> |
(<Field类型(struct),1字节><Field Id,2字节>
<Field类型,1字节><Field Id,2字节><值,bool(1字节)>|
<Field类型,1字节><Field Id,2字节><值,byte(1字节)>|
<Field类型,1字节><Field Id,2字节><值,i16(2字节)>|
<Field类型,1字节><Field Id,2字节><值,i32(4字节)>|
<Field类型,1字节><Field Id,2字节><值,i64(8字节)>|
<Field类型,1字节><Field Id,2字节><值,double(8字节)>|
<Field类型,1字节><Field Id,2字节><string类型字段长度,4字节><值,n字节> |
…
<Field类型(stop),1字节>)
…
enum
版本号
版本字段由第1-2个字节决定,必须是0x80, 0x01。总共2个字节,转换为整型为0x8001???? ,与掩码0xffff0000进行与操作后得到版本号。
0x8001???? -> 0x80 0x01 0x?? 0x??
0x80010000 -> 0x80 0x01 0x00 0x00
消息类型
消息类型字段由第4个字段决定,包括call(1)、reply(2)、exception(3)以及one-way(4) 4种消息类型
方法名长度
方法名长度字段由第5-8个字段决定。
方法名
方法名字段由第9-?个字段决定。
序列号
4个字节。
Java序列化机制实现:参考https://lobin.iteye.com/blog/629414序列化章节。
相关推荐
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 ...
Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, ...
本例改编自Apache Thrift教程: http://mikecvet.wordpress.com/2010/05/13/apache-thrift-tutorial-the-sequel/ http://chanian.com/2010/05/13/thrift-tutorial-a-php-client/ 原教程使用的是c++ server和...
Make applications cross-communicate using Apache Thrift! About This Book Leverage Apache Thrift to enable applications written in different programming languages (Java, C++, Python, PHP, Ruby, and so...
网上一直搜不到Windows下QT使用thrift的例子,自己整了个 QT版本 5.8.0 Boost版本 boost_1_61_0 Thrift版本 thrift-0.10.0
使用wireshark抓取thrift协议接口调用
thrift,Apache Thrift 0.9.2 版本,解压后直接直接安装,可伸缩的跨语言服务开发框架,命令: 解压命令:tar -zxf thrift-0.9.2.tar.gz 安装命令:./configure --with-lua=no && make && make install 查看版本:...
Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, ...
thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, ...
java代码使用thrift2操作hbase示例,thrift2连接hbase添加数据,单条查找,删除数据,根据扫描器查找,修改数据等测试实例
thrift环境搭建(内附thrift运行环境可执行程序、搭建说明文本)
Thrift RPC客户端的服务化框架代码,
thrift是一种可伸缩的跨语言服务的发展软件框架。它结合了功能强大的软件堆栈的代码生成引擎,以建设服务,工作效率和无缝地与C + +,C#,Java,Python和PHP和Ruby结合。thrift是facebook开发的,我们现在把它作为...
Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, ...
thrift 环境配置方法,步骤,顺序,只有文档,里面的方法很详细
使用thrift、websocket在javascript和c++之间建立rpc调用机制。 如果要使用js+html来写界面,cpp来写底层业务逻辑,这就非常有用了。 当然,如果底层不用cpp来写,也可以参考本代码的js对thrift的rpc包装。
thrift-编译工具
这个示例工程和我的博客《架构设计:系统间通信(13)——RPC实例Apache Thrift 下篇》(http://blog.csdn.net/yinwenjie/article/details/49869535)相对应。相关的设计和代码说明,请参见我的博客。另外,工程已经...
thrift-generator 是通过 Java 的接口生成 thrift 文件的工具。例子:public interface ICommonUserService { public User login(int id, String name); public User getUserById(long id); ...
RPC(Remote Procedure Call Protocol)远程过程调用协议实例,学习和使用thrift无痛入门代码。具体使用方法,可以看博客详解。