【netty笔记】基本概念

简单使用示例

服务端

        //EchoServerHandler是自己继承ChannelInboundHandlerAdapter重写的类
        final EchoServerHandler serverHandler = new EchoServerHandler();
        //创建EventLoopGroup
        EventLoopGroup group = new NioEventLoopGroup();

        try {
            //创建ServerBootstrap
            ServerBootstrap b = new ServerBootstrap();
            b.group(group)
                    //适用于NIO传输的Channel类型
                    .channel(NioServerSocketChannel.class)
                    //使用指定的端口设置套接字地址
                    .localAddress(new InetSocketAddress(port))
                    //添加一个EchoServerHandler到子Channel的ChannelPipeline
                    .childHandler(new ChannelInitializer<SocketChannel>() {
                        protected void initChannel(SocketChannel socketChannel) throws Exception {
                            socketChannel.pipeline().addLast(serverHandler);
                        }
                    });
            //异步绑定服务器,调用sync()方法阻塞等待直到绑定完成
            ChannelFuture f = b.bind().sync();
            //获取Channel的CloseFuture,并且阻塞当前线程直到它完成
            f.channel().closeFuture().sync();
        }finally {
            //关闭EventLoopGroup,释放所有的资源
            group.shutdownGracefully().sync();
        }

Bootstrap

netty应用程序通过设置bootstrap(引导)类开始,该类提供了一个用于网络成配置的容器。

  • 一种是用于客户端的Bootstrap
  • 一种是用于服务端的ServerBootstrap

Channel

netty中的channel定义了丰富的和socket交互的操作方法:bind、close、config、connect、isActive、isOpen、isWriteable、read、write等等,降低直接使用Socket类的复杂性。Netty提供大量的Channel实现来针对不同方式的处理、这些包括AbstraChannel、AbstractNioByteChannel、AbstractNioChannel、EmbeddedChannel、LocalServerChannel、NioSocketChannel等等

ChannelHandler

用户处理入站和出站的数据。常用的一个接口是ChannelInboundHandler,这个类型接收到入站事件(包括接收到的数据)可以处理应用程序逻辑。当你需要提供响应时,你也可以从ChannelInboundHandler冲刷数据。一句话,业务逻辑经常存活于一个或者多个ChannelInboundHandler

在这里插入图片描述

ChannelPipeline

ChannelPipline提供了ChannelHandler链的容器,并定义了用于该链上传播入站和出站事件流的API。当Channel被创建时,它会被自动地分配到它专属的ChannelPipeline。
在这里插入图片描述

ChannelFuture

用于监听Netty的处理结果,并根据结果进行后续处理。异步通知。

EventLoop

EventLoop用于处理连接的生命周期中所发生的事件,控制流、多线程处理、并发。

在这里插入图片描述

  • 一个EventLoopGroup包含一个或者多个EventLoop
  • 一个EventLoop在它的生命周期内只和一个Thread绑定
  • 所有由EventLoop处理的I/O事件都将在它专有的Thread上被处理
  • 一个Channel在它的生命周期内只注册于一个EventLoop
  • 一个EventLoop可能会分配给一个或多个Channel
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值