我正在开发Apache Thrift服务器/异步客户端应用程序。 但是当我调用异步方法回调时,我收到了这个错误:
java.io.IOException: Read call frame size failed
at org.apache.thrift.async.TAsyncMethodCall.doReadingResponseSize(TAsyncMethodCall.java:234)
at org.apache.thrift.async.TAsyncMethodCall.transition(TAsyncMethodCall.java:192)
at org.apache.thrift.async.TAsyncClientManager$SelectThread.transitionMethods(TAsyncClientManager.java:143)
at org.apache.thrift.async.TAsyncClientManager$SelectThread.run(TAsyncClientManager.java:113)
我在这里做了一些关于stackoverflow的研究,但没有什么对我有用。
这是我的服务器代码:
/**
* initialisiert die @see {ClientAccessPointImpl} Verbindung, damit der Client eine Verbindung mit dem Serve
* aufbauen kann
*/
private void initialisiereThriftServer( )
{
clientAccessPoint = new LoginAndRegisterServiceImpl();
processor = new Processor<>( clientAccessPoint );
Runnable server = new Runnable()
{
@Override
public void run( )
{
try
{
TNonblockingServerSocket serverTransport = new TNonblockingServerSocket(
ApplicationConfigurationLoader.getIntProperty( "core.thrift.port" ) );
TProtocolFactory protocolFactory = new TBinaryProtocol.Factory();
TServer server = new TThreadedSelectorServer( new TThreadedSelectorServer.Args( serverTransport )
.protocolFactory( protocolFactory ).inputTransportFactory( new TFramedTransport.Factory() )
.outputTransportFactory( new TFramedTransport.Factory() ).processor( processor )
.workerThreads(
ApplicationConfigurationLoader.getIntProperty( "core.thrift.workerThreads" ) ) );
server.serve();
}
catch ( TTransportException e )
{
LOGGER.log( Level.SEVERE , "Der Server konnte nicht gestartet werden!" , e );
}
}
};
new Thread( server ).start();
}
有谁知道为什么这段代码失败了?我使用了一个使用TFramedTransport的NonblockingSocket,我读到了这个....
希望你能帮助我! 纳斯答案 0 :(得分:0)
以上代码对我来说很好看。由于您没有附加处理器的代码,我认为这是异常的来源。请确保您使用的是AsyncProcessor
,而不仅仅是Processor
答案 1 :(得分:0)
服务器Processor
无关紧要,因为这是服务器代码而不是客户端的处理方式。
确保以相同的方式配置客户端。二进制与压缩,框架等