thrift源码研究-异步client&server

本文探讨Thrift的异步client和server,由于相关资料较少,作者通过源码分析来阐述其工作原理。以test.thrift为例,详细介绍了异步client的TwitterCobClient类,包括其sendString方法、回调函数以及TAsyncChannel的使用。同时,文章还涉及异步server的TwitterCobSvIf、TwitterAsyncProcessor类,解释了如何处理请求和响应。整个过程中,HTTP协议和libevent库的evhttp被用于异步通信,TMemoryBuffer作为输入输出缓存。
摘要由CSDN通过智能技术生成

      之前研究的thrift源码都是属于thrift的同步client&server,接下来看看异步client&server是怎样的?

       通过搜索发现异步client&server网上介绍得少或基本没有相关信息,于是乎,还是啃源码来得爽快,因为有一句话我挺赞同的:源代码是最好的设计文档。

      下面以test.thrift为例来深入研究异步client&server

/* @file : test.thrift */ 

namespace cpp thrift.example

service Twitter {
   string sendString(1:string data);
}

      生成客户代码时,需要加cob_style来生成异步client&server,如下命令:

      thrift -r -strict  --gen cpp:cob_style -o ./ test.thrift

      执行该命令后,所生成目录gen-cpp下有一些生成文件,除了多个Twitter_async_server.skeleton.cpp和Twitter.h&Twitter.cpp多了些异步代码外,其他跟不加cob_style一样。

     好了,代码都有了,接下来就通过代码来看看异步client&server是如何工作的。

一、分析异步client

     先从客户代码开始研究,上面提到Twitter.h&Twitter.cpp多了些异步代码,那么只要分析这些异步代码就可以了,在test.thrift例中,异步代码主要包括TwitterCobClient、TwitterCobSvIf和TwitterAsyncProcessor三个类,这里先关下TwitterCobClient类,它是异步client,类声明如下:

class TwitterCobClient : virtual public TwitterCobClIf {
 public:
  TwitterCobClient(boost::shared_ptr< ::apache::thrift::async::TAsyncChannel> channel, ::apache::thrift::protocol::TProtocolFactory* protocolFactory) :
    channel_(channel),
    itrans_(new ::apache::thrift::transport::TMemoryBuffer()),
    otrans_(new ::apache::thrift::transport::TMemoryBuffer()),
    piprot_(protocolFactory->getProtocol(itrans_)),
    poprot_(protocolFactory->getProtocol(otrans_)) {
    iprot_ = piprot_.get();
    oprot_ = poprot_.get();
  }
  boost::shared_ptr< ::apache::thrift::async::TAsyncChannel> getChannel() {
    return channel_;
  }
  virtual void completed__(bool /* success */) {}
  void sendString(std::tr1::function<void(TwitterCobClient* client)> cob, const std::strin

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值