Thrift之TProtocol类体系原理及源码详细解析之稠密协议类TDenseProtocol

本文解析了密集协议的工作原理及其优缺点,介绍了如何使用该协议进行高效的数据传输,并探讨了其应用场景及限制。

我的新浪微博:http://weibo.com/freshairbrucewoo

欢迎大家相互交流,共同提高技术。

这个协议类不建议投入到实际的生产环境(除非自己做了很强的压力和全面的测试)。这个密集协议的最大作用就是尽可能使用小的空间,密集协议类有两种类型的实例对象,一种是独立的,它不被使用在rpc通信中,而只是用于编码和解码;另一种是非独立的实例类型,它可以用于rpc通信,不过现在还不支持这种类型的实例。

要使用这个密集协议类来进行编码和解码必须支持Thrift自己实现的一直特殊的记录数据类型形式:就是type_spec属性,它的主要作用就是用于本地化反射机制来进行读写数据。

最佳的实践方法如下:

(1)永远不要使用可选的原语或容器类型;

(2)如果数据类型非常的大或非常的稀少那么使用结构体类型(struct);

(3)所有整数类型使用可变长的,能够使用i64类型避免膨胀;

(4)永远不要以任何方式修改结构体的定义而不改变换成的键,否则会造成恐慌的错误。

这个密集协议类继承至二进制协议类,所以可以直接使用二进制协议类的一些协议方法。

那么这个协议类相比前面的协议类又有什么优势和不足。既然这个协议类是后面逐渐发展起来的,那么它肯定有自己的优势和适合的应用场景,据我学习之,它的优势如下:

(1)相比较二进制协议它使用了可变长编码,当然紧凑协议类也实现了这个来减少整数型数据的传输流量,那么它相对于紧凑协议类又有什么优势?请看下面一条;

(2)相对于紧凑协议类它减少了一部分元数据的传输,例如struct结构里面的字段id和数据类型,这样就极大的减少了流量,当然速度也就自然提升了不少。

虽然它有这些优势,但是它的缺陷也是比较明显的,主要有以下三点:

(1)抽象将失去效果;

(2)必须维持第二个代码生成器;

(3)想要保持与旧版本的兼容将是是非常困难的。

通过它的优势和缺陷的分析发现,它们都是那么的鲜明,所以选择这个协议作为传输层之上的协议类型需要经过比较慎重的考虑,优点其实就是靠牺牲抽象性、易维护和向前兼容来提升数据传输速度和减少流量。

那么实现这个协议类需要用到什么特殊的技术,通过代码和注释发现,主要两点技术,一个是可变长编码,这个在紧凑协议类中已经实现和介绍;另一个技术就是消除一些传输的元数据。消除元数据的传输需要支持Thrift的编译器和牺牲一些二进制协议的向前和向后的兼容性。

上面分析了密集协议类的优秀和不足,但是就目前而言这个类还是处于试验的阶段,不能投入真正的生产环境,所以就不具体分析代码的实现了,有兴趣的同仁们可以自己看看代码的实现,使用到的技术前面已经介绍了。


简介: thrift是跨语言,server和client通信的一个框架,支持多种协议,二进制,文本http,json等方式,提供高效的数据传输方式。 thrift只负责对数据进行处理,然后在网络内进行传输的工作。不要认为thrift能在*.thrift文件中定义调度之的工作 thrift通过IDL(接口描述语言)来生成各种语言需要的接口代码。 执行thrift文件命令: java:thrift-0.9.1.exe --gen java test.thrift java:thrift-0.9.1.exe --gen php test.thrift 生成使用thrift需要的jar包: 下载Ant后, 配置环境变量, ANT_HOME=Ant解压路径。 下载thrift后使用ant编译需要的jar文件。<< cmd, 进入build.xml目录, ant -buildfile build.xml thrift协议protocol: TBinaryProtocol:二进制格式 TCompactProtocol:高效压缩的二进制格式 TDenseProtocol:与TCompactProtocol相比,meta信息略有不同 TJSONProtocol JSON TDebugProtocol text 格式 方便调试 thrift传输层transport: TSocket 阻塞的io TFramedTransport 非阻塞io TFileTransport 可以将一组thrift请求写到文件中 TMemoryTransport 使用内存 I/O TZlibTransport 使用zlib压缩 支持的server TSimpleServer 单线程 阻塞 TThreadPoolServer 多线程 阻塞 TNonblockingServer 多线程 非阻塞 THsHaServer api说是TNonblockingServer的扩展,半同步半异步 可定义的数据型: 基本型: bool:布尔值,true 或 false,对应 Java 的 boolean byte:8 位有符号整数,对应 Java 的 byte i16:16 位有符号整数,对应 Java 的 short i32:32 位有符号整数,对应 Java 的 int i64:64 位有符号整数,对应 Java 的 long double:64 位浮点数,对应 Java 的 double string:未知编码文本或二进制字符串,对应 Java 的 String 结构体型: struct:定义公共的对象,似于 C 语言中的结构体定义,在 Java 中是一个 JavaBean 容器型: list:对应 Java 的 ArrayList set:对应 Java 的 HashSet map:对应 Java 的 HashMap 异常型: exception:对应 Java 的 Exception 服务型: service:对应服务的
第三方支付功能的技术人员;尤其适合从事电商、在线教育、SaaS项目开发的工程师。; 使用场景及目标:① 实现微信与支付宝的Native、网页/APP等主流支付方式接入;② 掌握支付过程中关键的安全机制如签名验签、证书管理与敏感信息保护;③ 构建完整的支付闭环,包括下单、支付、异步通知、订单状态更新、退款与对账功能;④ 通过定时任务处理内容支付超时与概要状态不一致问题:本文详细讲解了Java,提升系统健壮性。; 阅读应用接入支付宝和建议:建议结合官方文档与沙微信支付的全流程,涵盖支付产品介绍、开发环境搭建箱环境边学边练,重点关注、安全机制、配置管理、签名核心API调用及验签逻辑、异步通知的幂等处理实际代码实现。重点与异常边界情况;包括商户号与AppID获取、API注意生产环境中的密密钥与证书配置钥安全与接口调用频率控制、使用官方SDK进行支付。下单、异步通知处理、订单查询、退款、账单下载等功能,并深入解析签名与验签、加密解密、内网穿透等关键技术环节,帮助开发者构建安全可靠的支付系统。; 适合人群:具备一定Java开发基础,熟悉Spring框架和HTTP协议,有1-3年工作经验的后端研发人员或希望快速掌握第三方支付集成的开发者。; 使用场景及目标:① 实现微信支付Native模式与支付宝PC网页支付的接入;② 掌握支付过程中核心的安全机制如签名验签、证书管理、敏感数据加密;③ 处理支付结果异步通知、订单状态核对、定时任务补偿、退款及对账等生产级功能; 阅读建议:建议结合文档中的代码示例与官方API文档同步实践,重点关注支付流程的状态一致性控制、幂等性处理和异常边界情况,建议在沙箱环境中完成全流程测试后再上线。
matlab2python 这是一个Python脚本,用于将Matlab文件或代码行转换为Python。此项目处于alpha阶段。 该实现严重依赖于Victor Leikehman的SMOP项目。 当前实现围绕SMOP构建,具有以下差异: 力图生成不依赖libsmop的代码,仅使用如numpy这样的标准Python模块。 使用常见缩写如np而非全称numpy。 尝试重排数组和循环索引,从0开始而不是1。 不使用来自libsmop的外部matlabarray和cellarray。 增加了对Matlab的基本支持,体中声明的属性在构造函数中初始化。 因上述改动,产出代码“安全性较低”,但可能更接近用户自然编写的代码。 实现相对直接,主要通过替换SMOP使用的后端脚本,这里称为smop\backend_m2py.py。 一些函数替换直接在那里添加。 额外的支持、导入模块以及其他微调替换(或说是黑客技巧)在matlabparser\parser.py文件中完成。 安装 代码用Python编写,可按如下方式获取: git clone https://github.com/ebranlard/matlab2python cd matlab2python # 安装依赖项 python -m pip install --user -r requirements.txt # 让包在任何目录下都可用 python -m pip install -e . # 可选:运行测试 pytest # 可选:立即尝试 python matlab2python.py tests/files/fSpectrum.m -o fSpectrum.py 使用方法 主脚本 存储库根目录下的主脚本可执行,并带有一些命令行标志(部分直接取自SMOP)。要将文件file.m转换为file.py,只需输入:
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值