2016-08-24 272 views
0

。 但当我致电异步方法回调,我得到这个错误:我正在开发一个Apache Thrift服务器/异步客户端应用程序,它可以读取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) 

我在这里做了一些研究的计算器,但没有为我工作。

这是我的服务器代码:

/** 
* 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,我读到了这个....

希望你能帮助我! Jonas

回答

0

上面的代码对我来说看起来很好。由于您没有附加处理器代码,我认为这是异常来自哪里。请确保您使用的是AsyncProcessor而不是简单的Processor

+0

是的,你是对的,我使用正常的处理器而不是AsyncProcessor。我有麻烦找到正确的用法,你能给我一个例子,我必须实现一个asyncProcessor吗? – Dudei95

+0

@ Dudei95它可能类似于'CreditManager.AsyncProcessor 处理器=新的CreditManager.AsyncProcessor (服务);'其中'服务'是'CreditManagerService'的一个实例 –

+0

@ Dudei95请标记为答案是否有效 –