【发布时间】:2013-12-30 05:49:05
【问题描述】:
以下代码有效。
服务器:
// 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();
客户:
<pre></pre>
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 客户端与一个使用 Java TThreadedSelectorServer 的服务器通信,也能够与这个使用 C++ TThreadedServer 的服务器通信。
【问题讨论】: