1 つの方法として、単一のローカル静的インスタンスを使用してライブラリ内に C++ クラスを作成することが考えられます。インスタンスは最初の呼び出しで構築され、アンロードで破棄されるため、次のようにコンストラクタ/デストラクタを使用して接続および切断できます。
#include <boost/shared_ptr.hpp>
#include <thrift/transport/TSocket.h>
#include <thrift/protocol/TBinaryProtocol.h>
#include "gen-cpp/mySvc.h"
using namespace apache::thrift::transport;
using namespace apache::thrift::protocol;
class ThriftProxy {
public:
ThriftProxy() :
trans(new TSocket("myhost", 8585)),
proto(new TBinaryProtocol(trans)),
client_(proto)
{
trans->open();
}
~ThriftProxy()
{
trans->close();
}
static mySvcClient & client()
{
static ThriftProxy proxy;
return proxy.client_;
}
private:
boost::shared_ptr<TSocket> trans;
boost::shared_ptr<TProtocol> proto;
mySvcClient client_;
};
ライブラリ内の関数は、ThriftProxy::client() メソッドを使用して Apache Thrift サーバーを呼び出すことができます。
int exportedFunc(int i) {
return ThriftProxy::client().myRPCFunc(i);
}
メモ: ほとんどの場合、TBufferedTransport または TFramedTransport を I/O スタックに追加することは、ネットワークへの小さな書き込みを減らすために良い考えです。例を単純にするために、ここでは省略します。