`
thecloud
  • 浏览: 911737 次
文章分类
社区版块
存档分类
最新评论

thrift之默认传输类TTransportDefaults和虚拟传输类TVirtualTransport

 
阅读更多
默认传输类TTransportDefaults提供了抽象类TTransport的默认实现,实现了非虚拟的方法(*_virt) read(), readAll(), write(),borrow() and consume()。基类TTransport总是调用对应的虚拟函数,而默认传输类按照默认的方式实现而不去自己在覆盖哪些对应的虚拟函数了。
  其实这个默认传输类的主要作用是作为虚拟传输类TVirtualTransport的父类,那么为什么需要这个类作为虚拟传输类的父类而不是直接采用抽象基类?由下面介绍虚拟基类的实现方式来决定的,因为为了避免采用虚基类,所以虚拟传输类采用了模板的方式来实现多继承(同时从两个类继承),也就是说可以从一个默认的类继承,而另一个类采用模板参数传递。而默认传输类的作用就是防止那些没有实现默认传输类实现的方法的子类造成递归调用(死循环了)。
  虚拟传输类的实现方式已经在上面介绍了,这样实现的好处就是避免了采用虚拟继承,而虚拟继承会造成一定性能的损失。下面是虚拟基类的实现代码(省略部分函数):
  template <class Transport_, class Super_=TTransportDefaults>
  class TVirtualTransport : public Super_ {
   public:
   //实现虚拟函数来调用模板参数传递进来的具体某一个传输类的非虚拟函数
   virtual uint32_t read_virt(uint8_t* buf, uint32_t len) {
   return static_cast<Transport_*>(this)->read(buf, len);
   }
   ......
  }
  费了这么大的皱褶就为了摆脱虚拟继承,看样子想要提高代码执行的效率确实不是那么简单的事情,不过也证明了一点,巧妙的编程思路和编程技巧也是提高代码效率很重要的一种方式。上面虽然没有采用虚拟继承,但是它的扩展性依然没有受到一点点影响。例如我们想要实现一个自己的传输类用于特殊的目的,那么只需要从虚拟传输类继承,如:class MyTransport : public TVirtualTransport<MyTransport> {...};然后实现自己的read(), readAll()等等函数(非虚拟的)。
  默认传输类和虚拟传输类都是为了实现整个传输层体系结构的帮助类,并没有实现具体的什么传输功能,不过后面介绍的具体的大部分传输类都是基于这两个类之上(继承),那么我们就开始看看一些重要的传输类的实现。
分享到:
评论

相关推荐

    thrift通过http传输的java例子

    接下来,Thrift的编译器会根据这个IDL文件生成Java代码,包括一个服务接口、一个服务处理类(实现服务接口)、一个服务客户端和一个服务端口接口。例如,`MyService.java`是服务接口,`MyServiceHandler.java`是服务...

    Thrift-java学习小结

    总的来说,Thrift是构建分布式系统和服务通信的强大工具,其简洁的接口定义、高效的协议和跨语言能力,使得它在IT行业中广泛应用。通过深入理解和实践Thrift,开发者能够更好地实现服务之间的高效通信。

    thrift通过openssl加密证书实现双向通信

    thrift框架通过vs2013编译好的静态库,然后通过vs2013实现双向通信代码,通信协议利用openssl加密证书的方式来实现,本资源给出了完整的实现代码,证书可以在网上百度一下,看看如何生成客户端和服务端的,然后编译...

    Thrift之C++初体验

    thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, ...

    Thrift之QT远程调用(银河麒麟高级服务器版V10操作系统)

    在本主题“Thrift之QT远程调用(银河麒麟高级服务器版V10操作系统)”中,我们将深入探讨如何在银河麒麟高级服务器版V10操作系统上,利用C++和QT库实现Thrift的RPC通信。 首先,我们需要了解银河麒麟高级服务器版...

    Thrift工具和依赖的jar包

    Thrift通过定义一种中间表示(IDL,Interface Definition Language)来描述服务,允许开发者在不同的编程语言中轻松地生成客户端和服务端代码,实现数据序列化和网络通信。 Thrift的核心概念包括以下几点: 1. **...

    thrift-delphi实例

    Thrift编译器会生成对应的服务接口、处理器类、以及数据结构的序列化和反序列化代码。 在服务器端,我们创建一个继承自Thrift生成的处理器类的子类,并实现服务接口中定义的方法。例如,对于上面的"MyService",...

    thrift_java_demo和安装包

    - 高效性:Thrift采用了高效的二进制传输协议,相比文本协议(如JSON、XML),在网络传输中更节省带宽和提高速度。 - 易于使用:通过自动代码生成,开发者可以专注于业务逻辑,而无需关心底层的通信细节。 了解...

    【Thrift之C++远程调用helloworld菜鸟教程】

    这个"Thrift之C++远程调用helloworld菜鸟教程"将引导初学者一步步完成从定义服务接口到编写服务器和客户端代码的过程,从而理解Thrift在C++中的工作原理和使用方法。通过实践这个教程,开发者可以更好地掌握RPC通信...

    thrift开源项目研究

    3. 分布式数据库:如Cassandra,利用Thrift实现跨节点的数据传输和查询。 六、源码分析 深入研究Thrift的源码有助于理解其内部机制,例如如何解析IDL、如何生成代码、传输层的具体实现等。这有助于优化自定义的...

    thrift入门

    Thrift 提供了多种传输协议,包括 TBinaryProtocol、TCompactProtocol、TJSONProtocol、TSimpleJSONProtocol 和 TDebugProtocol 等,每种协议都有其特点和优势,可以根据项目/产品中的实际需求选择合适的传输协议。...

    thrift入门教程+代码

    例如,对于Java,Thrift会生成`Iface`、`Processor`、`Client`和`Server`接口及类,开发者只需实现`Iface`接口。 5. 客户端与服务器通信:客户端使用生成的客户端代码来创建服务代理,通过代理调用服务方法。服务器...

    thrift中文简易教程

    - **TBinaryProtocol**:Thrift 默认使用的二进制协议,非常紧凑且高效。 - **TCompactProtocol**:比 TBinaryProtocol 更紧凑的二进制协议。 - **TJSONProtocol**:使用 JSON 格式进行序列化和反序列化。 ##### ...

    Thrift框架使用分享

    Thrift支持多种数据传输格式和方式,具体如下: 1. 支持的传输格式: - TBinaryProtocol:二进制格式,体积小,传输速度快。 - TCompactProtocol:压缩格式,进一步优化了传输数据的大小。 - TJSONProtocol:...

    thrift中间件实例代码

    6. **数据序列化与反序列化**:Thrift负责将数据结构在不同语言间进行序列化和反序列化,确保它们可以正确地在网络中传输。这是通过定义的数据结构类自动完成的,无需手动处理。 7. **网络通信**:Thrift支持多种...

    thrift实现http协议案例

    Thrift是一种高效的、跨语言的服务框架,最初由Facebook开发,现在是Apache的顶级...通过学习和理解这个案例,开发者可以更好地理解和应用Thrift在分布式系统中的角色,以及如何扩展其通信能力以适应不同的网络环境。

    Thrift-0.5.exe

    Thrift的主要目的是解决分布式系统中的通信问题,它允许开发者定义服务接口,并自动生成相应的客户端和服务器端代码,支持多种编程语言,包括C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, ...

    thrift入门学习教程

    相比于其他格式如JSON或XML,Thrift在性能和数据传输体积上有着显著优势,尤其适合用于大型系统的内部数据传输。 #### 三、Thrift的工作原理 **1. IDL(Interface Definition Language)** Thrift采用IDL作为描述...

    Thrift 示例代码_Java

    此外,Thrift 支持多种传输方式(如 HTTP、TCP)和序列化协议(如 Binary、JSON),为开发者提供了极大的灵活性。 总之,Thrift 示例代码 Java 版本提供了一个直观的学习平台,帮助开发者了解如何使用 Thrift 构建...

    thrift-Demo

    例如,在Java中,Thrift会生成一个`MyService.Iface`接口和一个`MyService$Processor`类,你需要实现`Iface`接口并使用`Processor`来处理客户端的请求。 在客户端,Thrift会生成一个`MyService`的客户端代理类,你...

Global site tag (gtag.js) - Google Analytics