Netty是一个高性能的网络编程框架,有着简单易于使用的抽象模型。利用Netty自带的Http协议编解码器,我们可以快速地以较少的代码编写一个简单的Http服务器。
本文主要介绍如何使用Netty实现一个极简的Http服务器,主要功能是通过接收一个浏览器Http请求,Netty服务器返回一个静态资源页面。
为了实现Http服务器,我们只需要用到Netty自带的两个编解码器:
- HttpServerCodec:用于Netty服务端,该类其实是
HttpRequestDecoder
和HttpResponseEncoder
的封装,因此我们在ChannelPipeline
中加入HttpServerCodec
即可实现Http请求的解码和Http响应的编码; - HttpObjectAggregator:Http请求经过
HttpServerCodec
解码之后是HttpRequest
和HttpContents
对象,HttpObjectAggregator
会将多个HttpRequest
和HttpContents
对象再拼装成一个FullHttpRequest
,再将其传递到下个Handler
。
首先,我们首先创建一个maven项目,在pom.xml
文件中添加netty-all
依赖即可:
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.32.Final</version>
</dependency>
第二步,编写HttpServer
类,作为Http服务启动的入口。此处我们通过命令行传入Http服务启动的端口号。HttpServer
类代码如下:
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.codec.http.HttpObjectAggregator;
import io.netty.handler.codec.http.HttpServerCodec;
import java.net.InetSocketAddress;