Netty入门之-http文件服务器

这篇博客介绍了如何使用Netty框架构建一个简单的HTTP文件服务器。Netty是一个高效的NIO框架,通过它能简化网络应用的开发。文章首先解释了Netty的异步IO特性,然后展示了如何创建一个仅包含两个Java文件的入门级项目,用于响应HTTP请求并提供文件下载。读者需要了解HTTP协议和Java基础知识。项目中的关键组件HttpRequestDecoder、HttpObjectAggregator和HttpRequestHandler被详细阐述,说明了它们在处理请求过程中的作用。最后,文章提到了处理大文件时应考虑使用HTTP trunked协议,以避免内存问题。
摘要由CSDN通过智能技术生成

Netty是一个NIO框架,让你快速、简单的的开发网络应用。它是一种新的开发网络应用的方式,使得开发网络应用更加简单,容易扩展。它隐藏了许多复杂的细节,并提供简单的api让你的业务逻辑和网络处理代码分离开来。Netty的所有api都是异步的,如果大家不了解异步IO,可以先学习一下异步IO方面的知识。

本文主要是写一个入门程序让大家了解netty的强大。本文主要编写一个基于http协议的文件服务器,可以使用浏览器来访问服务器的目录,下载文件等。如果不熟悉http协议可以先了解http相应相关的内容。

本入门程序只有两个java文件,开发环境为jdk1.7,依赖netty-all-5.0.0.Alpha2.jar

HttpFileServer.java

package test.http;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
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.HttpRequestDecoder;
import io.netty.handler.codec.http.HttpResponseEncoder;

public class HttpFileServer {
	private final int port=80;
	private final String localDir="d:/";
	
	public void run() throws  Exception{
		EventLoopGroup acceptorGroup = new NioEventLoopGroup();
		EventLoopGroup clientGroup = new NioEventLoopGroup();
		try {
			ServerBootstrap serverBookstrap = new ServerBootstrap();
			serverBookstrap.group(acceptorGroup, clientGroup).channel(NioServerSocketChannel.class)
			.option(ChannelOption.SO_BACKLOG, 100)
			.childHandler(new ChannelInitializer<SocketChannel>(){
				protected void initChannel(SocketChannel sc) throws Exception {
					sc.pipeline().addLast("http-decoder",new HttpRequestDecoder());
					sc.pipeline().addLast("http-aggregator",new HttpObjectAggregator(64*1024));
					sc.pipeline().addLast("http-encoder",new HttpResponseEncoder());
	              	sc.pipeline().addLast("http-handler",new HttpRequestHandler(localDir));
				}
			});
			ChannelFuture channelFuture = serverBookstrap.bind(port).sync();
			channelFuture.channel().closeFuture().sync();
		} finally {
			acceptorGroup.shutdownGracefully();
			clientGroup.shutdownGracefully();
		}
	}
	public static void main(String[] args) throws Exception {
		new HttpFileServer().run();
	}

}


Netty提类似linux管道机制的使用方法,可以向pipeline添加多个ChannelHandlerNetty会依次调用添加的handler来处理,这个很像java web中的servlet

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值