- package com.lidaobing.niotest.bin;
- import static org.jboss.netty.handler.codec.http.HttpResponseStatus.OK;
- import static org.jboss.netty.handler.codec.http.HttpVersion.HTTP_1_1;
- import java.net.InetSocketAddress;
- import java.util.concurrent.Executors;
- import org.jboss.netty.bootstrap.ServerBootstrap;
- import org.jboss.netty.buffer.ChannelBuffers;
- import org.jboss.netty.channel.ChannelFuture;
- import org.jboss.netty.channel.ChannelFutureListener;
- import org.jboss.netty.channel.ChannelHandlerContext;
- import org.jboss.netty.channel.ChannelPipeline;
- import org.jboss.netty.channel.ChannelPipelineFactory;
- import org.jboss.netty.channel.Channels;
- import org.jboss.netty.channel.ExceptionEvent;
- import org.jboss.netty.channel.MessageEvent;
- import org.jboss.netty.channel.SimpleChannelUpstreamHandler;
- import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
- import org.jboss.netty.handler.codec.http.DefaultHttpResponse;
- import org.jboss.netty.handler.codec.http.HttpChunkAggregator;
- import org.jboss.netty.handler.codec.http.HttpContentCompressor;
- import org.jboss.netty.handler.codec.http.HttpHeaders;
- import org.jboss.netty.handler.codec.http.HttpRequestDecoder;
- import org.jboss.netty.handler.codec.http.HttpResponse;
- import org.jboss.netty.handler.codec.http.HttpResponseEncoder;
- public class NettyHttpServer {
- public static void main(String[] args) {
- ServerBootstrap bootstrap = new ServerBootstrap(
- new NioServerSocketChannelFactory(
- Executors.newCachedThreadPool(),
- Executors.newCachedThreadPool(),
- 2));
- PipelineFactory factory = new PipelineFactory();
- bootstrap.setPipelineFactory(factory);
- bootstrap.bind(new InetSocketAddress(3456));
- }
- public static class PipelineFactory implements ChannelPipelineFactory {
- @Override
- public ChannelPipeline getPipeline() throws Exception {
- return Channels.pipeline(
- new HttpRequestDecoder(),
- new HttpChunkAggregator(1048576),
- new HttpResponseEncoder(),
- new HttpContentCompressor(),
- new EchoServerHandler());
- }
- }
- public static class EchoServerHandler extends SimpleChannelUpstreamHandler {
- @Override
- public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)
- throws Exception {
- HttpResponse response = new DefaultHttpResponse(HTTP_1_1, OK);
- response.setContent(ChannelBuffers.copiedBuffer("hello world\n".getBytes()));
- response.setHeader(HttpHeaders.Names.CONTENT_TYPE, "text/plain");
- response.setHeader(HttpHeaders.Names.CONTENT_LENGTH, response.getContent().readableBytes());
- ChannelFuture future = e.getChannel().write(response);
- future.addListener(ChannelFutureListener.CLOSE);
- }
- @Override
- public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e)
- throws Exception {
- e.getChannel().close();
- }
- }
- }