這一節說說客戶端。可以說,對於阻塞的客戶端,近乎於沒有任何邏輯。這裏僅僅把一次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異常。
可以說,簡單得不能再簡單了!