这一节说说客户端。可以说,对于阻塞的客户端,近乎于没有任何逻辑。这里仅仅把一次RPC调用的过程记录下来。还是认为,我们在Thrift声明的服务叫XXX,RPC调用的函数名叫YYY,而且不是oneway方法。Thrift会生成XXXClient类,这个类包括三个方法,YYY、send_YYY、recv_YYY。
程序员会显示的声明一个XXXClient的对象c,然后调用c.YYY。c.YYY顺次调用c.send_YYY和c.recv_YYY。前者是发送函数名,和参数,后者是接收返回值。整个流程如下:
1. writeMessageBegin
2. 写入参数,调用args.write
3. writeMessageEnd
4. getTransport()->writeEnd()
5. getTransport()->flush()
6. readMessageBegin 查看是异常还是返回值,查看RPC函数名
7. 如果是返回值,而且RPC函数名匹配,那么XXX_YYY_presult.read
8. readMessageEnd()
9. getTransport()->readEnd()
10. 读取返回值成功的话,把RPC结果返回,否则,抛出TApplicationException异常。
可以说,简单得不能再简单了!
转载于:https://blog.51cto.com/luckybins/1344984