Netty组件介绍

作者: Chinesszz | 来源:发表于2017-07-15 23:26 被阅读41次

在学习Netty之前,建议首先学习一个NIO,对关键的NIO组件有一个清醒认识

Buffer

Selector

总览

  • Bootstrap or ServerBootstrap
  • EventLoop
  • EventLoopGroup
  • ChannelPipeline
  • Future or ChannelFuture
  • ChannelInitializer
  • ChannelHandler

ServerBootstrap

一个Netty应用通常由一个Bootstrap开始,它主要作用是配置整个Netty程序,串联起各个组件。

EventLoop

一个EventLoop可以为多个Channel服务。 EventLoopGroup会包含多个EventLoop

ChannelPipeline,ChannelHandler

从PipeLine这个单词中可以看出来,是一个管道,处理连接。我们的业务代码handler一般都是放在这个管道中的

那么疑问来了,这个管道中的处理顺序是什么样呢?

 ChannelPipeline cp = channel.pipeline(); 
 cp.addLast("encoder", new HttpResponseEncoder());//1.负责输出
 cp.addLast("decoder", new HttpRequestDecoder());//2.负责把客户端的数据解码
 cp.addLast("handler", new HttpDispatchServerHandler());//3.自定义的业务处理器

按照我们执行顺序肯定不是根据添加顺序来处理的,应该是:2,把客户端的数据解码->3.对解码数据处理->1.加密返回给客户端。

那么 Netty 是怎么处理的呢?

ChannelHandler有两个子类ChannelInboundHandler和ChannelOutboundHandler,这两个类对应了两个数据流向,如果数据是从外部流入我们的应用程序,我们就看做是inbound,相反便是outbound

ChannelInitializer

顾名思义,这个就是channel初始化的容器,在这个里面设置处理器

 ServerBootstrap bootstrap = new ServerBootstrap();
        bossGroup = new NioEventLoopGroup();//负责绑定channel到selector
        workerGroup = new NioEventLoopGroup();//负责从selector中读取事件
        bootstrap.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class)
                .localAddress(6969).option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10000)
                .childOption(ChannelOption.SO_KEEPALIVE, true).childHandler(new ChannelInitializer<Channel>() {
            @Override
            protected void initChannel(Channel channel) throws Exception {
                ChannelPipeline cp = channel.pipeline();
                cp.addLast("idleStateHandler", new IdleStateHandler(5, 5, 5, TimeUnit.SECONDS));
                cp.addLast("decoder", new HttpRequestDecoder());
                cp.addLast("encoder", new HttpResponseEncoder());
                cp.addLast("aggregator", new HttpObjectAggregator(1048576));
                cp.addLast("deflater", new HttpContentCompressor());
                cp.addLast("handler", new HttpDispatchServerHandler());
                cp.addLast("out", new AcceptorIdleStateTrigger());
            }
        }).option(ChannelOption.SO_BACKLOG, 128);
        try {
            channel = bootstrap.bind().awaitUninterruptibly().channel();
            showBanner(6969);
        } catch (Exception ie) {
            throw new RuntimeException(ie);
        }

Future or ChannelFuture

Netty中的连接都可以是异步的,但是也可以设置为非异步

异步:

相关文章

  • Netty组件介绍

    在学习Netty之前,建议首先学习一个NIO,对关键的NIO组件有一个清醒认识 Buffer Selector 总...

  • Netty组件介绍

    在学习Netty之前,建议首先学习一个NIO,对关键的NIO组件有一个清醒认识 Buffer Selector 总...

  • Netty是什么

    本文基于Netty4.1展开介绍相关理论模型,使用场景,基本组件、整体架构 Netty简介 Netty是 一个异步...

  • Netty 核心组件

    Netty 核心组件模块 .Channel .回调 .Future .事件和ChannelHandler 下面介绍...

  • Java读源码之Netty深入剖析[百度网盘分享]

    第1章 课程介绍 介绍本课程需要的前提知识和内容概要 1-1 Netty深入剖析 第2章 Netty基本组件 使用...

  • 一个基于 Netty + Protobuf 构建的高性能 TCP

    本期看点 本文将为大家介绍一个基于 Netty + Protobuf 构建的高性能 TCP 网关开源组件。该组件部...

  • 通用文件服务组件(HTTP实现版本)

    上篇文章介绍了通用文件服务组件(Netty实现版本),本文介绍基于HTTP与Apache FileUpload的方...

  • Netty架构模型设计与源码浅析

    本文主要从IO模型、Netty逻辑架构、Netty各组件的设计与应用为主导,由简-难-细展开来介绍,其中包括IO模...

  • netty 相关问题

    概览: Netty 是什么?为什么要用 Netty?Netty 应用场景了解么?Netty 核心组件有哪些?分别有...

  • Netty学习之组件和设计

    Netty学习之组件和设计 前言 前面我们简单地介绍了Netty,然后学习了一个简单的小例子,接下来我们来学习Ne...

网友评论

    本文标题:Netty组件介绍

    本文链接:https://www.haomeiwen.com/subject/ylozhxtx.html