Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 9th, 2012  |  syntax: None  |  size: 2.85 KB  |  hits: 25  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. package com.lidaobing.niotest.bin;
  2.  
  3. import static org.jboss.netty.handler.codec.http.HttpResponseStatus.OK;
  4. import static org.jboss.netty.handler.codec.http.HttpVersion.HTTP_1_1;
  5.  
  6. import java.net.InetSocketAddress;
  7. import java.util.concurrent.Executors;
  8.  
  9. import org.jboss.netty.bootstrap.ServerBootstrap;
  10. import org.jboss.netty.buffer.ChannelBuffers;
  11. import org.jboss.netty.channel.ChannelFuture;
  12. import org.jboss.netty.channel.ChannelFutureListener;
  13. import org.jboss.netty.channel.ChannelHandlerContext;
  14. import org.jboss.netty.channel.ChannelPipeline;
  15. import org.jboss.netty.channel.ChannelPipelineFactory;
  16. import org.jboss.netty.channel.Channels;
  17. import org.jboss.netty.channel.ExceptionEvent;
  18. import org.jboss.netty.channel.MessageEvent;
  19. import org.jboss.netty.channel.SimpleChannelUpstreamHandler;
  20. import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
  21. import org.jboss.netty.handler.codec.http.DefaultHttpResponse;
  22. import org.jboss.netty.handler.codec.http.HttpChunkAggregator;
  23. import org.jboss.netty.handler.codec.http.HttpContentCompressor;
  24. import org.jboss.netty.handler.codec.http.HttpHeaders;
  25. import org.jboss.netty.handler.codec.http.HttpRequestDecoder;
  26. import org.jboss.netty.handler.codec.http.HttpResponse;
  27. import org.jboss.netty.handler.codec.http.HttpResponseEncoder;
  28.  
  29. public class NettyHttpServer {
  30.         public static void main(String[] args) {
  31.         ServerBootstrap bootstrap = new ServerBootstrap(
  32.                 new NioServerSocketChannelFactory(
  33.                         Executors.newCachedThreadPool(),
  34.                         Executors.newCachedThreadPool(),
  35.                         2));
  36.         PipelineFactory factory = new PipelineFactory();
  37.         bootstrap.setPipelineFactory(factory);
  38.  
  39.         bootstrap.bind(new InetSocketAddress(3456));
  40.         }
  41.        
  42.         public static class PipelineFactory implements ChannelPipelineFactory {
  43.  
  44.                 @Override
  45.                 public ChannelPipeline getPipeline() throws Exception {
  46.                         return Channels.pipeline(
  47.                                         new HttpRequestDecoder(),
  48.                                         new HttpChunkAggregator(1048576),
  49.                                         new HttpResponseEncoder(),
  50.                                         new HttpContentCompressor(),
  51.                                         new EchoServerHandler());
  52.                 }
  53.                
  54.         }
  55.        
  56.         public static class EchoServerHandler extends SimpleChannelUpstreamHandler {
  57.                 @Override
  58.                 public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)
  59.                                 throws Exception {
  60.                           HttpResponse response = new DefaultHttpResponse(HTTP_1_1, OK);
  61.                           response.setContent(ChannelBuffers.copiedBuffer("hello world\n".getBytes()));
  62.                           response.setHeader(HttpHeaders.Names.CONTENT_TYPE, "text/plain");
  63.                           response.setHeader(HttpHeaders.Names.CONTENT_LENGTH, response.getContent().readableBytes());
  64.                           ChannelFuture future = e.getChannel().write(response);
  65.                           future.addListener(ChannelFutureListener.CLOSE);
  66.                 }
  67.                 @Override
  68.                 public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e)
  69.                                 throws Exception {
  70.                         e.getChannel().close();
  71.                 }
  72.                
  73.         }
  74.  
  75. }