为啥apache thrifts 传输层分为低级传输和传输包装器
Posted
技术标签:
【中文标题】为啥apache thrifts 传输层分为低级传输和传输包装器【英文标题】:Why is apache thrifts transport layer divided into low-level transport and transport wrapper为什么apache thrifts 传输层分为低级传输和传输包装器 【发布时间】:2019-04-22 06:37:15 【问题描述】:我认为划分 Apache Thrift 的传输层的原因是因为底层传输只是使用/包装了一些基本的 Java 功能,如套接字。并且传输包装器仅使用 zlib-transport 或 framed-transport 准备数据,并使用其他一些传输将其发送到网络。但是 HttpClient 也是一个传输包装器,并没有使用其他传输来发送。
那么 Apache Thrift 将传输层分为低级传输和传输包装器的原因是什么?
来源:https://thrift.apache.org/docs/Languages
【问题讨论】:
【参考方案1】:近年来,术语“分层传输”和“端点传输”已经被创造出来,它们描述得很好。
想法是这样的
您总是需要一个(端点)传输来从/从线路或任何物理等效物写入/读取数据。
您可能希望在端点传输之上添加额外的功能层,例如压缩数据、通过缓冲区或“帧”传输优化传输、添加加密或任何其他想到的东西。
虽然第 1 部分是强制性的,但第 2 部分不是强制性的。此外,您可以将多个分层传输堆叠在一起:
协议 = 紧凑 分层传输 = 自定义加密传输 分层传输 = 帧传输 端点传输 = 套接字在其他一些目标中,Thrift 旨在提供极大的灵活性和模块化,本质上是通过模块化获得灵活性。当您查看 TTransport/TServerTransport 或 TProtocol 是什么的核心基础时,您会发现当需要自定义传输或协议时,它并不是真正需要实现的大量代码。
由于加密或缓冲之类的东西对使用的任何传输或协议没有硬性依赖,因此通过设计保持它们独立是很自然的。这就是使 Thrift 协议/传输堆栈易于使用和易于扩展的原因。它可以让您构建出色的应用程序而不会妨碍您。
PS:更好的阅读可能是:https://thrift.apache.org/docs/concepts
【讨论】:
以上是关于为啥apache thrifts 传输层分为低级传输和传输包装器的主要内容,如果未能解决你的问题,请参考以下文章
为啥我不能将 apache.thrift 导入 IntelliJ 项目?