Netty:简易Http Webserver编写
Netty 介绍
Netty 是一个基于NIO的客户、服务器端编程框架。使用Netty可以使我们快速简单的开发网络应用。
Netty有很多功能,我们可以用Netty作为RPC框架,实现远程过程的调用;也可以编写长连接的服务器,使用websocket等功能;我们还可以把Netty当做http服务器(类似Tomcat),对http请求进行接收和响应。用Netty编写服务器时,采取的编程模型和获取请求模型不遵循serlvet规范,Netty有自己一套处理方式。
下面我们进行一段简易HttpServer的编写(作者使用Intellij IDEA进行Netty项目的开发)。
创建Netty工程
打开IDEA,创建一个gradle项目。
点击下一步,输入GroupID(公司域名反转)和ArtifactID(模块名)
然后一直点下一步直到FInished。
至此我们便创建了一个工程,工程目录如下图所示:
我们在src/main/java文件夹中编写应用代码,src/test中是我们编写测试文件用的,本文忽略测试文件。
导入netty jar包
导入netty jar包的过程很简单,我们可以在build.gradle文件的dependencies下加入下面一行代码:
compile group: 'io.netty', name: 'netty-all', version: '4.1.36.Final'
如下图所示
最新引入netty的代码可以在maven repository中通过搜索netty all关键词找到。
然后我们就可以进行HttpServer的编写了。
Server编写
右击src/main/java文件夹,new一个新的package,如下图所示。
然后在这个package中创建一个class名为TestServer
在TestServer class中创建main函数,在main函数里面我们创建两个NioEventLoopGroup,分别为bossGroup,workerGroup。
EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
bossGroup接受连接请求并把请求交给workerGroup处理;workerGroup获取请求参数,进行业务处理,然后把结果返回客户端。
然后创建ServerBootstrap 类的实例,ServerBootstrap 是简化服务端启动的类。该类通过反射的形式创建NioServerSocketChannel。
channel相当于链接,同用户端进行网络连接、关闭和读写。
最后调用ChildHandler方法,里面传入一个对请求进行处理的类,在本例代码中我们传入我们编写的TestServerInitializer实例(请看下一节)。
ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.group(bo