Экономия C ++: Могу ли я использовать TFramedTransportFactory с TThreadedServer?

Следующий код работает.

Сервер:



// 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.

2

Решение

TFramedTransport необходимо в C ++ lib при использовании TNonblockingServer (аналогично Java TThreadedSelectorServer).

В других ситуациях это необязательно, но это будет работать. Это не используется в примерах, те, которые используют TThreadedServer.

Тем не менее - нет ничего плохого в вашей настройке.

0

Другие решения

Других решений пока нет ...

По вопросам рекламы [email protected]