2012-04-16 4 views
0

netty를 사용하여 서버에서 여러 맵 타일 이미지를 동시에 다운로드하려고합니다. - 시간 제한 - ... 나는 여러 가지 approachs을 tryed 그러나 아무도 제대로 작동하지 한번 제대로 org.jboss.netty.handler.codec.PrematureChannelClosureException단일 서버에서 netty mutliple 쿼리

작품마다 10 배 - 정지 :하지만 지금까지 나는 항상 다양한 오류가 .

package bench; 

    import java.net.InetSocketAddress; 
    import java.util.ArrayList; 
    import java.util.List; 
    import java.util.Map; 
    import java.util.concurrent.ConcurrentHashMap; 
    import java.util.concurrent.Executors; 
    import org.apache.derby.iapi.services.io.ArrayOutputStream; 
    import org.jboss.netty.bootstrap.ClientBootstrap; 
    import org.jboss.netty.channel.*; 
    import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory; 
    import org.jboss.netty.handler.codec.http.*; 

    public class NettyDebug { 

     public static void main(String[] args) { 

      String host = "tile.openstreetmap.org"; 
      int port = 80; 

      final List<String> requests = new ArrayList<String>(); 
      requests.add("/5/16/8.png"); 
      requests.add("/5/18/12.png"); 
      requests.add("/5/18/13.png"); 
      requests.add("/5/14/10.png"); 
      requests.add("/5/20/11.png"); 
      requests.add("/5/19/13.png"); 
      requests.add("/5/22/11.png"); 
      requests.add("/5/16/13.png"); 
      requests.add("/5/20/14.png"); 
      requests.add("/5/21/14.png"); 
      requests.add("/5/19/12.png"); 
      requests.add("/5/21/11.png"); 
      requests.add("/5/15/10.png"); 
      requests.add("/5/15/15.png"); 
      requests.add("/5/22/14.png"); 
      requests.add("/5/14/15.png"); 
      requests.add("/5/17/8.png"); 
      requests.add("/5/18/8.png"); 
      requests.add("/5/13/9.png"); 
      requests.add("/5/22/12.png"); 
      requests.add("/5/13/16.png"); 
      requests.add("/5/22/13.png"); 
      requests.add("/5/17/13.png"); 
      requests.add("/5/17/12.png"); 
      requests.add("/5/16/14.png"); 
      requests.add("/5/19/8.png"); 
      requests.add("/5/20/8.png"); 
      requests.add("/5/14/9.png"); 
      requests.add("/5/23/14.png"); 
      requests.add("/5/14/16.png"); 
      requests.add("/5/16/12.png"); 
      requests.add("/5/23/11.png"); 
      requests.add("/5/16/11.png"); 
      requests.add("/5/13/15.png"); 
      requests.add("/5/17/11.png"); 
      requests.add("/5/13/10.png"); 
      requests.add("/5/19/14.png"); 
      requests.add("/5/20/13.png"); 
      requests.add("/5/19/11.png"); 
      requests.add("/5/18/11.png"); 
      requests.add("/5/18/14.png"); 
      requests.add("/5/17/14.png"); 
      requests.add("/5/15/9.png"); 
      requests.add("/5/23/13.png"); 
      requests.add("/5/21/13.png"); 
      requests.add("/5/20/12.png"); 
      requests.add("/5/15/16.png"); 
      requests.add("/5/21/8.png"); 
      requests.add("/5/23/12.png"); 
      requests.add("/5/22/8.png"); 
      requests.add("/5/18/16.png"); 
      requests.add("/5/19/9.png"); 
      requests.add("/5/20/10.png"); 
      requests.add("/5/15/14.png"); 
      requests.add("/5/19/10.png"); 
      requests.add("/5/21/12.png"); 
      requests.add("/5/16/9.png"); 
      requests.add("/5/23/8.png"); 
      requests.add("/5/23/15.png"); 
      requests.add("/5/23/10.png"); 
      requests.add("/5/16/16.png"); 
      requests.add("/5/13/13.png"); 
      requests.add("/5/13/12.png"); 
      requests.add("/5/22/10.png"); 
      requests.add("/5/14/14.png"); 
      requests.add("/5/17/16.png"); 
      requests.add("/5/17/9.png"); 
      requests.add("/5/20/9.png"); 
      requests.add("/5/21/16.png"); 
      requests.add("/5/21/10.png"); 
      requests.add("/5/18/10.png"); 
      requests.add("/5/15/12.png"); 
      requests.add("/5/21/15.png"); 
      requests.add("/5/23/16.png"); 
      requests.add("/5/21/9.png"); 
      requests.add("/5/15/11.png"); 
      requests.add("/5/13/8.png"); 
      requests.add("/5/19/16.png"); 
      requests.add("/5/19/15.png"); 
      requests.add("/5/14/11.png"); 
      requests.add("/5/14/8.png"); 
      requests.add("/5/20/16.png"); 
      requests.add("/5/18/15.png"); 
      requests.add("/5/15/13.png"); 
      requests.add("/5/20/15.png"); 
      requests.add("/5/18/9.png"); 
      requests.add("/5/22/15.png"); 




      final ClientBootstrap BOOTSTRAP = new ClientBootstrap(
        new NioClientSocketChannelFactory(
        Executors.newCachedThreadPool(), 
        Executors.newCachedThreadPool())); 
      BOOTSTRAP.setPipelineFactory(new PipeFactory()); 


      final Map<Integer, ArrayOutputStream> results = new ConcurrentHashMap<Integer, ArrayOutputStream>(); 

      for(final String query : requests){ 
       final ChannelFuture cf = BOOTSTRAP.connect(new InetSocketAddress(host, port)); 
       cf.addListener(new ChannelFutureListener() { 
        @Override 
        public void operationComplete(ChannelFuture future) throws Exception { 
         final Channel channel = future.getChannel(); 
         results.put(channel.getId(), new ArrayOutputStream()); 

         final HttpRequest request = new DefaultHttpRequest(
           HttpVersion.HTTP_1_1, HttpMethod.GET, query); 
         request.setHeader(HttpHeaders.Names.CONNECTION, HttpHeaders.Values.CLOSE); 
         request.setHeader(HttpHeaders.Names.ACCEPT_ENCODING, HttpHeaders.Values.BYTES); 

         if (channel.isOpen() && channel.isWritable()) { 
          channel.write(request); 
         } 

        } 
       }); 
      } 



      //HOW TO HANDLE THOSE MULTIPLE QUERIES ? 

     } 

     private static class PipeFactory implements ChannelPipelineFactory { 

      @Override 
      public ChannelPipeline getPipeline() throws Exception { 
       // Create a default pipeline implementation. 
       final ChannelPipeline pipeline = org.jboss.netty.channel.Channels.pipeline(); 
       pipeline.addLast("codec", new HttpClientCodec()); 
       pipeline.addLast("handler", new QueryHandler()); 
       return pipeline; 
      } 
     } 

     private static class QueryHandler extends SimpleChannelUpstreamHandler { 

      @Override 
      public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception { 
       System.out.println(e.getMessage().getClass()); 
      } 
     } 

답변

0

이 그물코 3.4.0.Final 버그했다 .. 난 그냥 수정을 위해 최선을 다하고 :

나는 누군가가 내가 gratefull 수 wouls (I 기본적인 NIO 클라이언트 문제를 고려할 것)을 해결할 수 우리는 3.4.1을 공개 할 것입니다. 끝내서.