1. 程式人生 > >TBinaryProtocolT程式碼分析

TBinaryProtocolT程式碼分析

TBinaryProtocolT是Thrift支援的預設二進位制協議,它以二進位制的格式寫所有的資料,基本上直接傳送原始資料。因為它直接從TVirtualProtocol類繼承,而且是一個模板類。它的模板引數就是一個封裝具體傳輸傳送的類,這個類才是真正實現資料傳輸的。這個類的定義上一節舉例已經出現過了就不在列出來了。

下面我就結合scribe的Log函式執行的具體過程來分析使用這個協議所執行的功能,看看二進位制協議是怎樣工作的。

RPC呼叫使用到協議部分主要是在傳送函式相關資訊到伺服器和接收伺服器返回結果。現在我就結合Log函式的實現程式碼具體分析。首先看看Log函式的傳送相關資訊函式send_log(在檔案scribe.cpp):

bool PhotoClient::SendPhoto(const OneFile& onefile)
{
  send_SendPhoto(onefile);
  return recv_SendPhoto();
}

void PhotoClient::send_SendPhoto(const OneFile& onefile)
{
  int32_t cseqid = 0;
  oprot_->writeMessageBegin("SendPhoto", ::apache::thrift::protocol::T_CALL, cseqid);

  Photo_SendPhoto_pargs args;
  args.onefile = &onefile;
  args.write(oprot_);

  oprot_->writeMessageEnd();
  oprot_->getTransport()->writeEnd();
  oprot_->getTransport()->flush();
}