thrift和frugality区别(thrift使用小记_CUDevChinaUnix博客)
标签:
客户端
接口
transport
protocol
分类: 程序设计Thrift中的几个概念:
Server 服务模型
Handler 数据处理接口
Processor 数据处理对象
Protocol 数据传输协议
Transport 数据传输方式(1)支持的传输格式
TBinaryProtocol – 二进制格式.
TCompactProtocol – 压缩格式
TJSONProtocol – JSON格式
TSimpleJSONProtocol –提供JSON只写协议, 生成的文件很容易通过脚本语言解析 。
TDebugProtocol – 使用易懂的可读的文本格式,以便于debug(2) 支持的数据传输方式
TFileTransport:文件(日志)传输类 ,允许client将文件传给server ,允许server将收到的数据写到文件中 。
THttpTransport:采用Http传输协议进行数据传输
TSocket:采用TCP Socket进行数据传输
TZlibTransport:压缩后对数据进行传输,或者将收到的数据解压下面几个类主要是对上面几个类地装饰(采用了装饰模式) ,以提高传输效率。
TBufferedTransport:对某个Transport对象操作的数据进行buffer ,即从buffer中读取数据进行传输 ,或者将数据直接写入buffer
TFramedTransport:以frame为单位进行传输 ,非阻塞式服务中使用 。同TBufferedTransport类似 ,也会对相关数据进行buffer ,同时 ,它支持定长数据发送和接收 。
TMemoryBuffer:从一个缓冲区中读写数据(3)支持的服务模型
TSimpleServer – 简单的单线程服务模型 ,常用于测试
TThreadedServer - 多线程服务模型 ,使用阻塞式IO,每个请求创建一个线程。
TThreadPoolServer – 线程池服务模型 ,使用标准的阻塞式IO ,预先创建一组线程处理请求 。
TNonblockingServer – 多线程服务模型,使用非阻塞式IO(需使用TFramedTransport数据传输方式)thrift的安装需要注意实现安装一些库 。
thrift的C++编译器使用了boost中的shared_ptr ,如果需要配合c++使用的话 ,需要先安装boost 。
如果要使用NonBlockingServer的话 ,需要安装libevent 。服务器编写的一般步骤:
1. 创建Handler
2. 基于Handler创建Processor
3. 创建Transport
4. 创建Protocol方式
5. 基于Processor, Transport和Protocol创建Server
6. 运行Server客户端编写的一般步骤:
1. 创建Transport
2. 创建Protocol方式
3. 基于Transport和Protocol创建Client
4. 运行Client的方法2. 如果服务器采用TNonblockingServer的话 ,客户端必须采用TFramedTransport 。程序链接的时候需要thriftnb。
3. 默认TServerSocket和TSocket都设置了NoDelay为1,使得报文尽快发送出去 ,如果客户端和服务器间传输数据量较大 ,通过可以设置NoDelay为0来开启Nagel算法,缓存一段数据后再进行发送 ,减少报文数量 。
TSocket默认开启了Linger ,并设置linger time为0,这样close会丢弃socket发送缓冲区中的数据 ,并向对端发送一个RST报文 ,close不会被阻塞 ,立即返回 。
TServerSocket默认关闭了Linger ,close不会被阻塞 ,立即返回。
4. fb303作为handler的基类 ,里面预置了一些rpc方法 ,用于监控 ,包括系统状态 ,请求次数等状态信息 。
thrift文件中需要include "fb303.thrift"这样来将service导入目标thrift文件中 。thrift编译后的代码只需要相应的Handler多重继承facebook::fb303::FacebookBase就好了。5. 可以将ZeroMQ等作为transport使用其zeromq来进行通讯 。
可以参考thrift-0.7.0/contrib/zeromq中的代码 。【未进行测试】
https://issues.apache.org/jira/browse/THRIFT-812
6. thrift支持完全async,生成代码的时候需要使用
thrift --gen cpp:cob_style xxx.thrift
这样的话 ,生成的代码需要TEventServer.h ,但是async目录下没有,只有TEvhttpServer.h
https://github.com/klickverbot/thrift/commit/5ddabb8e3f63a15874e436c9a650dc17f7dd7028#diff-2http://dongxicheng.org/search-engine/thrift-framework-intro/
http://dongxicheng.org/search-engine/thrift-guide/
http://dongxicheng.org/search-engine/thrift-rpc/创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!