大量のオーバーヘッドがあるリサイクル クライアントを作成しています: a TSocket
、 a TBufferedTransport
、および a TBinaryProtocol
。通常はこのように作成されます
サンプル Thrift クライアント
int main(int argc, char **argv) {
shared_ptr<TTransport> mysocket(new TSocket("localhost", 9090));
shared_ptr<TTransport> mytransport(new TBufferedTransport(mysocket));
shared_ptr<TProtocol> myprotocol(new TBinaryProtocol(mytransport));
TestServiceClient client(myprotocol);
try {
mytransport->open();
client.testmethod(); //and you can call server methods like so
mytransport->close();
}catch (TException &tx) {
printf("ERROR: %s\n", tx.what());
}
}
ただし、私のクライアントには、静的ライブラリの形式でそれが必要です。したがって、 main メソッドはなく、open と closeのメソッドinit()
とメソッドを作成しました。つまり、 、 、 、およびすべてのグローバル変数を作成する必要がありましたが、メソッド内で初期化することを意味する "localhost" 以外の ip に設定する必要もあります。何か案は?exit()
mytransport
mysocket
mytransport
myprotocol
client
mysocket
mysocket
PS。また、静的ライブラリを開いたり閉じたりするときに自動的にinit()
呼び出す方法を知っている人はいますか? exit()
[解決済み]
編集:正しいIPを知るまで初期化できないことを忘れていた mysocket
ので、とにかくmysocketをグローバル変数として宣言できないと思います