Netty充当Http服务器简单示例
Netty的应用场景
- RPC 通信框架
- 长连接服务器
- Http服务器
- Channel (通道, 相当于一个连接)
- ChannelHandler (通道处理器, 相当于拦截器, 过滤器)
- Pipeline(管道, 一个Pipeline由多个ChannelHandler构成)
Maven
io.netty
netty-all
4.1.12.Final
Gradle:
compile 'io.netty:netty-all:4.1.12.Final'
使用的是官网上最新版: 4.1.12.Final
【Netty充当Http服务器简单示例】服务器代码实现:
/**
* 服务端
*/
public class TestServer {public static void main(String[] args) throws Exception {
//定义两个事件循环组, bossGroup用于接收连接, 不对连接进行处理, 转给workerGroup进行处理
EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
ServerBootstrap serverBootstrap = new ServerBootstrap();
//ServerBootstrap用于启动服务端
serverBootstrap.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class)
.childHandler(new TestServerInitializer());
//TestServerInitializer是我们自己编写的请求初始化器ChannelFuture channelFuture = serverBootstrap.bind(8899).sync();
//绑定端口8899channelFuture.channel().closeFuture().sync();
//关闭监听
} finally {
//终止事件循环
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
}
}
/**
* 初始化器
*/
public class TestServerInitializer extends ChannelInitializer {@Override
protected void initChannel(SocketChannel ch) throws Exception {
ChannelPipeline pipeline = ch.pipeline();
pipeline.addLast("httpServerCodec", new HttpServerCodec());
pipeline.addLast("testHttpServerHandler", new TestHttpServerHandler());
//TestHttpServerHandler自定义的处理器
}
}
/**
* 处理器
*/
public class TestHttpServerHandler extends SimpleChannelInboundHandler {// 此方法用于读取客户端的请求并进行响应
@Override
protected void channelRead0(ChannelHandlerContext ctx, HttpObject msg) throws Exception {
if (msg instanceof HttpRequest) {
ByteBuf content = Unpooled.copiedBuffer("Hello World", CharsetUtil.UTF_8);
//响应内容
FullHttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1,
HttpResponseStatus.OK, content);
//netty提供的响应对象, 设置http版本, 状态以及响应内容//设置响应头信息
response.headers().set(HttpHeaderNames.CONTENT_TYPE, "text/plain");
response.headers().set(HttpHeaderNames.CONTENT_LENGTH, content.readableBytes());
ctx.writeAndFlush(response);
//返回给客户端
}}
}
运行项目
使用curl命令:
curl 'http://localhost:8899'
回车便会看到响应内容"Hello World", 也可以直接在浏览器中输入 http://localhost:8899 进行查看。
推荐阅读
- 画解算法(1.|画解算法:1. 两数之和)
- ts泛型使用举例
- https请求被提早撤回
- HTTP高级(Cookie,Session|HTTP高级(Cookie,Session ,LocalStorage )
- 拒绝可以很艺术,或者很行为艺术。
- www和https://又被Chrome地址栏隐藏了
- Spring集成|Spring集成 Mina
- 零基础学习Python作业本(13)
- AnyProxy抓取http/https请求
- 网络编程基础--HTTP