thrift:从tSimpleServer更改为TNonblockingServer [英] thrift: changing from tSimpleServer to TNonblockingServer

查看:4540
本文介绍了thrift:从tSimpleServer更改为TNonblockingServer的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个简单的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服务器(处理器,serverTransport,
transportFactory,protocolFactory);

并能够连接到以下行:

  boost :: shared_ptr< TSocket> socket(new TSocket(localhost,port)); 
boost :: shared_ptr< TTransport> transport(new TBufferedTransport(socket));
boost :: shared_ptr< TProtocol>协议(新TBinaryProtocol(传输));

MyClient客户端(协议);

现在我要将服务器更改为 TNonblockingServer 。因此,我将服务器代码更改为以下内容:

  shared_ptr< TServerTransport> serverTransport(new TServerSocket(port)); 
shared_ptr< TProtocolFactory> protocolFactory(new TBinaryProtocolFactory());
TNonblockingServer服务器(处理器,
protocolFactory,
端口);

客户端未更改。现在服务器投诉有关客户端的以下错误消息:

  Thrift:Mon Aug 19 22:55:43 2013 TNonblockingServer:在港口9990,1 io线的服务。 
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线程#0注册为通知。
Thrift:Mon Aug 19 22:55:43 2013 TNonblockingServer:IO线程#0正在进入循环...
Thrift:Mon Aug 19 22:55:48 2013 TNonblockingServer:frame size too large(2147549185> ; 268435456)从客户端< Host:127.0.0.1 Port:57130> ;.远程端不使用TFramedTransport?

我该怎么办?注释?我使用的版本的thrift的1.0版本只有这个版本支持多路复用。

解决方案

尝试使用TFramedTransport,而不是TBufferedTransport您的客户。
看看这个例子: http://wiki.apache.org/thrift/另一个需要注意的事情是,根据上面的例子,TNonblockingServer接受一个ThreadManager作为参数。







$ b b

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

解决方案

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.

这篇关于thrift:从tSimpleServer更改为TNonblockingServer的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆