C ++ Thrift:我可以在TThreadedServer中使用TFramedTransportFactory吗?

时间:2013-12-12 00:49:21

标签: java c++ thrift transport

以下代码有效。

服务器:



    // SampleServiceHandler is a class that implements 
    // the Thrift service methods.
    shared_ptr handler(new SampleServiceHandler);
    shared_ptr processor(new SampleServiceProcessor(handler));
    shared_ptr serverTransport(
       new transport::TServerSocket(serverPort));
    shared_ptr transportFactory(
       new transport::TFramedTransportFactory());
    shared_ptr protFactory(
       new protocol::TBinaryProtocolFactory());
    shared_ptr server(new server::TThreadedServer(
       processor, serverTransport, transportFactory, protFactory));
    server->serve();

客户端:

shared_ptr<TSocket> socket(new TSocket(serverName, serverPort));
shared_ptr<TTransport> transport(new TFramedTransport(socket));
shared_ptr<protocol::TProtocol> protocol(
   new protocol::TBinaryProtocol(transport));
shared_ptr<ThriftClient> client(new SampleServiceClient(protocol));
transport->open();
client->sampleThriftMethod();

shared_ptr<TSocket> socket(new TSocket(serverName, serverPort)); shared_ptr<TTransport> transport(new TFramedTransport(socket)); shared_ptr<protocol::TProtocol> protocol( new protocol::TBinaryProtocol(transport)); shared_ptr<ThriftClient> client(new SampleServiceClient(protocol)); transport->open(); client->sampleThriftMethod();

但是,当我在服务器端使用TBufferedTransportFactory而不是TFramedTransportFactory之前,它也在工作。我发现使用TThreadedServer的唯一示例代码使用TBufferedTransportFactory,所以我想知道TFramedTransportFactory是否有问题。

我切换它的原因是因为我想要一个使用TFramedTransport与Java TThreadedSelectorServer-using服务器通信的Java客户端也可以与这个使用C ++ TThreadedServer的服务器通信。

1 个答案:

答案 0 :(得分:0)

使用TFramedTransport时,

TNonblockingServer在C ++ lib中是必需的(类似于Java TThreadedSelectorServer)。

在其他情况下,它是可选的,但它会起作用。它没有在示例中使用,是那些使用TThreadedServer。

仍然 - 您的设置没有任何问题。