近排玩起了protobuf,看了陳碩protobuf rpc和eventrpc rpc,寫點什麼下來,方便以後查看。google官方共用的一個協議編碼器。可以使用它來產生rpc協議。
定義例子:
package sudoku;message SudokuRequest { required string checkerboard = 1;}//請求包格式message SudokuResponse { optional bool solved = 1 [default=false]; optional string checkerboard = 2;}//回複包格式service SudokuService { rpc Solve (SudokuRequest) returns (SudokuResponse);}//rpc伺服器類定義option cc_generic_services = true;//是否generate rpc伺服器類代碼
rpc伺服器介面類SudokuService
類SudukuService繼承::google::protobuf::Service,成員函數如下:
GetDescriptor返回一個ServiceDescriptor類型;
CallMethod負責轉化SudokuRequest和SudukuResponse,在已有的方法集中調用相應的方法
GetRequestPrototype和GetResponsePrototype根據所給的方法返回請求和響應Message的執行個體
rpc stub類SudokuService_Stub
類SudukuService_Stub繼承自類SudukuService,與類SudukuService相比,它多了一個channel函數和RpcChannel成員,其中RpcChannel成員是給用戶端發送請求給服務端用的。
參考:
http://code.google.com/apis/protocolbuffers/docs/reference/cpp-generated.html#service
http://code.google.com/apis/protocolbuffers/docs/reference/cpp/google.protobuf.service.html
http://www.codedump.info/?p=169
http://blog.csdn.net/solstice/article/details/6319512