Thrift使用入門(2) - 用Thrift實現一個簡單的Server/Client應用程式

鍾超發表於2011-07-22

Thrift可以實現C++、Java、Python等多種語言的自動生成,此處以C++為例。


本文共5部分,其中1,2和3部分為重點。


1. 編寫[.thrift]檔案

你可以google到官方的例項如下:

struct Student{
 1: i32 sno,
 2: string sname,
 3: bool ssex,
 4: i16 sage,
}
service Serv{
 void put(1: Student s),
}

將上述程式碼儲存為student.thrift檔案。


2. 自動生成伺服器端程式

在Terminal中輸入如下命令,可自動生成[.cpp]和[.h]檔案。

thrift -r --gen cpp student.thrift

得到的檔案如下:

Serv.cpp
Serv.h
Serv_server.skeleton.cpp
student_constants.cpp
student_constants.h
student_types.cpp
student_types.h

其中Serv_server.skeleton.cpp中有伺服器端執行的main函式。這些檔名的Serv和student與你最初建立的thrift檔案有關。


3. 編寫客戶端程式

#include "Serv.h"  // Your .h File
#include <transport/TSocket.h>
#include <transport/TBufferTransports.h>
#include <protocol/TBinaryProtocol.h>

using namespace apache::thrift;
using namespace apache::thrift::protocol;
using namespace apache::thrift::transport;

using boost::shared_ptr;

int main(int argc, char **argv) {
	boost::shared_ptr<TSocket> socket(new TSocket("localhost", 9090));
	boost::shared_ptr<TTransport> transport(new TBufferedTransport(socket));
	boost::shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport));

	transport->open();

	// Your Codes

	transport->close();

	return 0;
}

4. 編譯/連結

g++ -g -I/home/michael/opt/include/thrift -L/home/michael/opt/lib/ -lthrift Serv.cpp student_types.cpp student_constants.cpp Serv_server.skeleton.cpp -o server

g++ -g -I/home/michael/opt/include/thrift -L/home/michael/opt/lib/ -lthrift -lm -pthread -lz -lrt -lssl Serv.cpp student_types.cpp student_constants.cpp client.cpp -o client

5. 執行

./server

./client


相關文章