Следующий код работает.
Сервер:
// 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();
[/ NOEDIT]
Тем не менее, он также работал раньше, когда я использовал TBufferedTransportFactory вместо TFramedTransportFactory на стороне сервера. Единственный пример кода, который я нашел для использования TThreadedServer, использует TBufferedTransportFactory, поэтому мне интересно, есть ли что-то не так с TFramedTransportFactory.
Причина, по которой я переключился, заключается в том, что я хочу, чтобы клиент Java, использующий TFramedTransport, общался с сервером, использующим Java TThreadedSelectorServer, чтобы также иметь возможность общаться с этим сервером, использующим T ++ TThreadedServer.
TFramedTransport
необходимо в C ++ lib при использовании TNonblockingServer
(аналогично Java TThreadedSelectorServer).
В других ситуациях это необязательно, но это будет работать. Это не используется в примерах, те, которые используют TThreadedServer.
Тем не менее - нет ничего плохого в вашей настройке.
Других решений пока нет ...