2012-04-16 7 views
0

nettyを使用してサーバから複数のマップタイル画像を同時にダウンロードしようとしています。しかし、これまでのところ、私は常に様々なエラーがあります。 - タイムアウト を - フリーズ - org.jboss.netty.handler.codec.PrematureChannelClosureException単一サーバ上でnetty mutlipleクエリ

が適切に10回おきに動作します...私はいくつかの異なるapproachsをしようと試みたが、どれも正しく動作しません。

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のバグでした..私はちょうど修正をコミット:

I誰かが、私はgratefullことwouls(私は基本NIOクライアントの問題を考えるもの)、それを解決することができます私たちは3.4.1をリリースします。

関連する問題