以下代码有效。
服务器:
// 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的服务器通信。
答案 0 :(得分:0)
TFramedTransport
时, TNonblockingServer
在C ++ lib中是必需的(类似于Java TThreadedSelectorServer)。
在其他情况下,它是可选的,但它会起作用。它没有在示例中使用,是那些使用TThreadedServer。
仍然 - 您的设置没有任何问题。