Thrift协议

阅读: 评论:0

错位匹配
Thrift协议
Thrift⾃下到上可以分为4层
Server(single-threaded, event-driven etc)
服务器进程调度
Processor(compiler generated)
RPC接⼝处理函数分发,IDL定义接⼝的实现将挂接到这⾥⾯
Protocol (JSON, compact etc)
协议
Transport(raw TCP, HTTP etc)
⽹络传输
Thrift实际上是实现了C/S模式,通过代码⽣成⼯具将接⼝定义⽂件⽣成服务器端和客户端代码(可以为
不同语⾔),从⽽实现服务端和客户端跨语⾔的⽀持。⽤户在Thirft描述⽂件中声明⾃⼰的服务,这些服务经过编译后会⽣成相应语⾔的代码⽂件,然后⽤户实现服务(客户端调⽤服务,服务器端提服务)便可以了。其中protocol(协议层, 定义数据传输格式,可以为⼆进制或者XML等)和transport(传输层,定义数据传输⽅式,可以为TCP/IP传输,内存共享或者⽂件共享等)被⽤作运⾏时库。
Thrift⽀持的传输及服务模型
⽀持的传输格式:
参数描述
TBinaryProtocol ⼆进制格式
TCompactProtocol 压缩格式
TJSONProtocol JSON格式
蔬菜包装盒TSimpleJSONProtocol 提供JSON只写协议, ⽣成的⽂件很容易通过脚本语⾔解析。
TDebugProtocol 使⽤易懂的可读的⽂本格式,以便于debug
⽀持的数据传输⽅式:
参数描述
TSocket 阻塞式socker
TFramedTransport 以frame为单位进⾏传输,⾮阻塞式服务中使⽤。
电磁TFileTransport 以⽂件形式进⾏传输。
TMemoryTransport 将内存⽤于I/O. java实现时内部实际使⽤了简单的ByteArrayOutputStream。
TZlibTransport 使⽤zlib进⾏压缩,与其他传输⽅式联合使⽤。当前⽆java实现。
微孔板孵育器⽀持的服务模型:
参数描述
TSimpleServer 简单的单线程服务模型,常⽤于测试
TThreadPoolServer 多线程服务模型,使⽤标准的阻塞式IO。
TNonblockingServer 多线程服务模型,使⽤⾮阻塞式IO(需使⽤TFramedTransport数据传输⽅式)
基本类型
bool: 布尔值 (true or false), one byte
byte:  有符号字节
i16:  16位有符号整型
i32:  32位有符号整型
i64:  64位有符号整型
double: 64位浮点型
string: Encoding agnostic text or binary string
struct结构体  thrift中struct是定义为⼀种对象,和⾯向对象语⾔的class差不多.,但是struct有以下⼀些约束:
struct不能继承,但是可以嵌套,不能嵌套⾃⼰。
1. 其成员都是有明确类型插销螺母
直线导轨滑台
2. 成员是被正整数编号过的,其中的编号使不能重复的,这个是为了在传输过程中编码使⽤。
3. 成员分割符可以是逗号(,)或是分号(;),⽽且可以混⽤,但是为了清晰期间,建议在定义中只使⽤⼀种,⽐如C++学习者可以就使⽤分号(;)。
4. 字段会有optional和required之分和protobuf⼀样,但是如果不指定则为⽆类型–可以不填充该值,但是在序列化传输的时候也会序列化进去,
optional是不填充则部序列化,required是必须填充也必须序列化
5. 每个字段可以设置默认值
6. 同⼀⽂件可以定义多个struct,也可以定义在不同的⽂件,进⾏include引⼊。
Expand source
容器(Containers)
Thrift3种可⽤容器类型:
1.
1. list(t): 元素类型为t的有序表,容许元素重复。
2. set(t):元素类型为t的⽆序表,不容许元素重复。对应c++中的set,java中的HashSet,python中的set,php中没有set,则转换为list
类型。
3. map(t,t): 键类型为t,值类型为t的kv对,键不容许重复。对⽤c++中的map, Java的HashMap, PHP 对应 array, Python/Ruby 的
dictionary。
容器中元素类型可以是除了service外的任何合法Thrift类型(包括结构体和异常)。为了最⼤的兼容性,map的key最好是thrift的基本类型,有些语⾔不⽀持复杂类型的key,JSON协议只⽀持那些基本类型的key。容器都是同构容器,不失异构容器。

本文发布于:2023-05-15 16:34:20,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/4/100922.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:服务   传输   类型   定义   容器   实现   元素   客户端
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图