效果示例
本文为了测试和显示方便,将Thrift客户端和服务端编写在同一QT程序中,分别开启一个线程进行交互。
测试操作:
点击“开启服务”,开启Thrift服务端的监听;在“测试数据”的输入框中输入测试消息,点击“请求服务”发送给服务端进行处理;并把服务端的返回结果显示在“返回结果”的输出框中。
QT调用Thrift库
编译VS2015 x64版本的Thrift静态库,并在QT工程的.pro文件中添加:
INCLUDEPATH += $$PWD \
$YOUR_THRIFT_PATH/thrift
LIBS += $YOUR_THRIFT_PATH/thrift/lib/libthrift_x64.lib
如果报boost相关库的LNK2019错误,需要在QT路径中添加boost库,如:
把boost的头文件拷贝到:
$PATH_TO_QT\Qt5.8.0\5.8\msvc2015_64\include\
把boost的库文件拷贝到:
$PATH_TO_QT\Qt5.8.0\5.8\msvc2015_64\lib\
服务端核心代码
创建ThriftServer类,继承自QObject,用于封装Thrift服务端操作。
点击UI界面的“开启服务”,发送信号开启服务端的监听,调用ThriftServer类的serve函数。
void ThriftServer::serve()
{
int port = 9000;
::apache::thrift::stdcxx::shared_ptr<PSMPServerHandler> handler(new PSMPServerHandler());
::apache::thrift::stdcxx::shared_ptr<TProcessor> processor(new PSMPServerProcessor(handler));
::apache::thrift::stdcxx::shared_ptr<TServerTransport> serverTransport(new TServerSocket(port));
::apache::thrift::stdcxx::shared_ptr<TTransportFactory> transportFactory