art*_*hur 4 c++ connection thrift
我有一个简单的节俭服务器:
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);
Run Code Online (Sandbox Code Playgroud)
并能够与以下线路连接:
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);
Run Code Online (Sandbox Code Playgroud)
现在我想将服务器更改为TNonblockingServer. 因此,我将服务器代码更改为以下内容:
shared_ptr<TServerTransport> serverTransport(new TServerSocket(port));
shared_ptr<TProtocolFactory> protocolFactory(new TBinaryProtocolFactory());
TNonblockingServer server(processor,
protocolFactory,
port);
Run Code Online (Sandbox Code Playgroud)
客户端不变。现在服务器抱怨客户端并显示以下错误消息:
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?
Run Code Online (Sandbox Code Playgroud)
我做错了什么?注释?我正在使用 1.0-dev 版本的 thrift 因为只有这个版本支持多路复用..
尝试在您的客户端中使用 TFramedTransport 而不是 TBufferedTransport。看这个例子:http : //wiki.apache.org/thrift/ThriftUsageC%2B%2B
要注意的另一件事是,根据上面的示例,TNonblockingServer 将 ThreadManager 作为参数。