大量のオーバーヘッドがあるリサイクル クライアントを作成しています: 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()mytransportmysocketmytransportmyprotocolclientmysocketmysocket
PS。また、静的ライブラリを開いたり閉じたりするときに自動的にinit()呼び出す方法を知っている人はいますか? exit()[解決済み]
編集:正しいIPを知るまで初期化できないことを忘れていた mysocketので、とにかくmysocketをグローバル変数として宣言できないと思います