1

私の現在のタスクは、Qt ライブラリに基づいて Thrift IPC インターフェイスを備えたシンプルなサーバーを作成することです。thrift をダウンロードし、コンパイルし、interface.thrift ファイルを作成し、スタブ ( --gen cpp ) を生成しました。また、簡単な例を正常にコンパイルしましたが、これらはすべて Qt を使用していません。今、thrift を Qt と統合する必要がありますが、TQTcpServer は Async プロセッサを必要としています! スタブ内に非同期プロセッサは見つかりませんでした (TDispatchProcessor のみ)。

プロセッサを TQTcpServer に渡す方法は? 小さな例が望ましいでしょう。

TQTcpServer(boost::shared_ptr<QTcpServer> server,
          boost::shared_ptr<TAsyncProcessor> processor,
          boost::shared_ptr<apache::thrift::protocol::TProtocolFactory> protocolFactory,
          QT_PREPEND_NAMESPACE(QObject)* parent = NULL);
4

2 に答える 2

0

これが私のメインの外観です。これは非常にシンプルで、すべて localhost で実行されています。

 int main(int argc, char *argv[]) {
    QCoreApplication a(argc, argv);

    boost::shared_ptr<QTcpServer> tcp_server_( new QTcpServer() );
    boost::shared_ptr<UserStorageAsyncHandler> handler(new UserStorageAsyncHandler());
    boost::shared_ptr<TAsyncProcessor> processor(new UserStorageAsyncProcessor(handler));
    boost::shared_ptr<TProtocolFactory> protocolFactory(new TBinaryProtocolFactory());

    boost::shared_ptr<apache::thrift::async::TQTcpServer> thrift_server_(
                new apache::thrift::async::TQTcpServer( tcp_server_, processor, protocolFactory) );

    if (!tcp_server_->listen(QHostAddress::Any, 27015)) {
        std::cout << "TCP Server not listening" << std::endl;
        return 1;
    }
    return a.exec();
}
于 2013-08-02T08:41:38.230 に答える