这一节说说客户端。可以说,对于阻塞的客户端,近乎于没有任何逻辑。这里仅仅把一次RPC调用的过程记录下来。还是认为,我们在Thrift声明的服务叫XXX,RPC调用的函数名叫YYY,而且不是oneway方法。Thrift会生成XXXClient类,这个类包括三个方法,YYY、send_YYY、recv_YYY。程序员会显示的声明一个XXXClient的对象c,然后调用c.YYY。c.YYY顺次调用c
Thrift框架主要分为四层:Service,Protocol,Transport,Server。前述介绍的TNonBlockingServer就是一种Server,除此之外,还有很多别的Server,比TNonBlockingServer要简单的多,以后会简要介绍其中的一两个。Service由程序员自己编写,是实际的RPC调用体。还剩中间俩:Protocol是对函数调用的名称、参数、返回值的序列
以上三节尚且漏掉一点,就是作业控制。如果没有设置作业控制,那么TNonBlockingServer默认接收到作业就立即执行,整个变成了一个串行的结构,完全失去了使用TNonBlockingServer的意义。一般的作业控制,使用SimpleThreadManager即可。他继承基本的ThreadManager,并提供了一个启动ThreadManager的简易流程:设置最长作业队列——开启作业控制—
前面铺垫了很多,现在该讲讲TNonBlockingServer本身了。构造函数会调用init方法,参数的默认值基本上都可以从这里找到。构造函数有很多重载的声明,比较特别的是声明其中的一个参数是一个宏定义,基本功能就是:如果宏第一个参数是第二个参数的子类,那么宏返回void*类型,否则,尝试其他构造方法的声明匹配。这个宏使用的是boost::enable_if,一个很绕的模板类型定义,具体参见htt
TThreadedServer vs. TNonblockingServerIntroductionWhich Thrift RPC server should MapKeeper use, TThreadedServer or TNonblockingServer? This benchmark compares 2 Thrift C++ RPCservers using StubServer.
TNonblockingServer的I/O线程是TNonblockingIOThread对象。每个TNonblockingIOThread保存服务的server指针,同时记录监听的套接字。他并不是真正的pthread,所以线程号是额外指定的,在构造方法中指定。TNonblockingIOThread注册两类事件,一类是监听套接字,回调函数注册为TNonblockingIOThread::list
很久就想总结一下Thrift的Cpp lib库的学习情况,但是一直没有狠下心来去写。不是没有时间,就是恐怕理解不透彻。一晃几个月过去了,很多东西已经慢慢遗忘。今天,下定决心重新拾起来,边看边总结。这个故事,就从最有意思的Server端lib开始。这里的Server选用TNonBlockingServer,和他搭配的Transport选用TFrameTransport。这一节主要讲述该类包含的几个辅
使用环境是Centos6.4,python版本2.7.3,thrift版本0.9.0。使用中遇到了以下问题:1. root:code for hash md5 was not found没有找到MD5的库,于是解释器又去寻找SHA1 SHA256 SHA384等等,但是无一例外的找不到。直接import _hashlib,报没有找到libssl.so.6。查找发现这个库是openssl提供的,y
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号