thrift: changing from tSimpleServer to TNonblockingServer

匿名 (未验证) 提交于 2019-12-03 08:59:04

问题:

I have a simple thrift server:

  shared_ptr<TProcessor> processor(new MyProcessor(handlerTrace));   shared_ptr<TServerTransport>  serverTransport(new TServerSocket(port));   shared_ptr<TTransportFactory> transportFactory(new TBufferedTransportFactory());   shared_ptr<TProtocolFactory>  protocolFactory(new TBinaryProtocolFactory());    TSimpleServer server(processor, serverTransport,                transportFactory, protocolFactory); 

and able to connect with the following lines:

   boost::shared_ptr<TSocket> socket(new TSocket("localhost", port));    boost::shared_ptr<TTransport> transport(new TBufferedTransport(socket));    boost::shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport));     MyClient client(protocol); 

Now I want to change the server to TNonblockingServer. Therefore I changed the server code to the following:

  shared_ptr<TServerTransport>  serverTransport(new TServerSocket(port));   shared_ptr<TProtocolFactory> protocolFactory(new TBinaryProtocolFactory());   TNonblockingServer server(processor,                 protocolFactory,                 port); 

The client is unchanged. Now the server complaints about the client with the following error message:

Thrift: Mon Aug 19 22:55:43 2013 TNonblockingServer: Serving on port 9990, 1 io threads. Thrift: Mon Aug 19 22:55:43 2013 TNonblockingServer: using libevent 2.0.16-stable method epoll Thrift: Mon Aug 19 22:55:43 2013 TNonblocking: IO thread #0 registered for listen. Thrift: Mon Aug 19 22:55:43 2013 TNonblocking: IO thread #0 registered for notify. Thrift: Mon Aug 19 22:55:43 2013 TNonblockingServer: IO thread #0 entering loop... Thrift: Mon Aug 19 22:55:48 2013 TNonblockingServer: frame size too large (2147549185 > 268435456) from client <Host: 127.0.0.1 Port: 57130>. Remote side not using TFramedTransport? 

What do I do wrong? Comments? I am using the 1.0-dev version of thrift as only this version supports multiplexing..

回答1:

Try using TFramedTransport instead of TBufferedTransport in your client. Look at this example: http://wiki.apache.org/thrift/ThriftUsageC%2B%2B

Another thing to notice is that according to the example above TNonblockingServer takes a ThreadManager as an argument.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!