搭建一个高性能、高并发的服务程序(Netty)

什么是Netty?Netty是一款受大公司青睐的java开源网络编程框架,用以快速开发高性能、高可靠性的网络服务程序。为什么不叫Http服务程序?Netty可以通过编程自定义各种协议,当然也可以作为Http服务。BIO和NIO分别是什么意思?BIO(Blocking I/O),阻塞IO,资源不可用时,IO请求一直阻塞,阻塞导致处理网络I/O时,一个线程只能处理一个网络连接。...
摘要由CSDN通过智能技术生成

什么是Netty?

Netty是一款受大公司青睐的java开源网络编程框架,用以快速开发高性能、高可靠性的网络服务程序。

为什么不叫Http服务程序?

Netty可以通过编程自定义各种协议,当然也可以作为Http服务。

BIO和NIO分别是什么意思?

BIO(Blocking I/O),阻塞IO,资源不可用时,IO请求一直阻塞,阻塞导致处理网络I/O时,一个线程只能处理一个网络连接。

NIO(Non-Blockiing I/O),非阻塞IO,资源不可用时,非阻塞IO就立即通行,不会阻塞,线程可以继续执行其他任务,等到资源可用的时候再去读取。

为什么Netty会受到大公司的青睐?

虽然说,非阻塞IO比阻塞IO有更高的性能,但是对于开发来的,难度就成数倍递增了。由于是有多少数据就读取多少数据,这样在读取完整之前需要将已经读取到的数据保存起来,而且需要与其他地方来的数据隔离开来不能混在一起,否则就不知道这数据是谁的了。

但是,Netty隐藏其背后的复杂性而提供一个易于使用的 API 的客户端 / 服务器框架。Netty作为业界最流行的NIO框架之一,它的健壮性、功能、性能、可定制性、可扩展性都是首屈一指的。以下是Netty的优点:

1、API 使用简单,开发门槛低;

2、性能高,通过与其它业界主流的 NIO 框架对比,Netty 的综合性能最优;

3、预置了多种编解码功能,支持多种主流协议;

4、定制能力强,通过channelHandler对通信框架进行灵活扩展;

5、稳定,修复了Java 原生NIO出现的所有Bug;

6、社区活跃,版本迭代周期短,发现的 BUG 可以被及时修复,同时,更多的新功能会被加入;

7、经历了大规模的商业应用考验,质量得到验证。在互联网、大数据、网络游戏、企业应用、电信软件等众多行业得到成功商用,证明了它完全满足不同行业的商用标准;

下面举一个由Netty搭建的一个下载文件的服务程序

一、添加依赖

<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-all</artifactId>
    <version>4.1.42.Final</version>
</dependency>

二、新建一个ServerBootstrap对象,并设置fileServerHandler

public class HttpServer {

    public static void run(final int port, final String url) {
        EventLoopGroup bossGroup = new NioEventLoopGroup();
        EventLoopGroup workerGroup = new NioEventLoopGroup();
        try {
            ServerBootstrap b = new ServerBootstrap();
            b.group(bossGroup, workerGroup)
                    .channel(NioServerSocketChannel.class)
                    .childHandler(new ChannelInitializer<SocketChannel>() {
                        @Override
                        protected void initChannel(SocketChannel ch) {
                            // 加入http的解码器
                            ch.pipeline().addLast("http-decoder", new HttpRequestDecoder());
                            // 加入ObjectAggregator解码器,作用是他会把多个消息转换为单一的FullHttpRequest或者FullHttpResponse
                            ch.pipeline().addLast("http-aggregator", new HttpObjectAggregator(65536));
                            // 加入http的编码器
                            ch.pipeline().addLast("http-encoder", new HttpResponseEncoder());
                            // 加入chunked 主要作用是支持异步发送的码流(大文件传输),但不专用过多的内存,防止java内存溢出
         
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值